學習 設計模式 第二種 策略模式

2021-09-29 01:56:03 字數 1451 閱讀 8321

策略模式--是指物件有某個行為,但是在不同的場景中,該行為有不同的實現算。

uml圖:

主要思想:1、通過context類來配置,維護乙個strategy物件,遮蔽客戶端對策略、演算法的直接訪問,封裝可能存在的變化;

2、strategy類是抽象類或者介面類,所有的具體演算法都要實現(繼承)該類。

例子:商場優惠活動,如打8折、滿100減50等。

1、策略介面類:所有的演算法類必須實現該介面,共用同乙個方法獲取結果,方便後續配置類的呼叫(也可以使用抽象類,進行實現)

public inte***ce cash
2、具體的演算法

/**

* 折扣

* 正常**折扣為1

* 8折為0.8

*/public class cashrate implements cash

@override

public double acceptcash(double money)

}

/**

* 滿減

* 如 滿100減50

*/public class cashreturn implements cash

@override

public double acceptcash(double money)

}

3、配置類:該類維護乙個策略物件,將具體的演算法封裝起來,統一呼叫。通過建構函式傳入引數

public class cashcontext 

public double getresult(double money)

}

4、測試

public class strategymain 

}

總結:與簡單工廠類似,工廠模式是使用工廠類統一生成物件,策略模式是通過乙個配置類維護乙個物件。

優點:1、可以自由切換演算法;2、可以避免多重判斷條件;3、擴充套件性好

缺點:1、策略類多時,會顯得臃腫,每個策略都是乙個類,復用性小;2、所有的策略類對外暴露

建議:當策略多於四個時,考慮使用混合模式來解決策略類膨脹的問題。

擴充套件使用:結合簡單工廠模式解決策略類對外暴露的問題

1、修改context配置類,其他不變

public class cashcontext 

}public double getresult(double money)

}

2、測試

public class strategymain 

}

就這些吧,整體來說不是很難理

Qt 第二種執行緒

流程 工程目錄 新增在這裡作為全域性 namespace ui class mywidget public qwidget endif mywidget h mythread.cpp include mythread.h include 待會用到sleep函式 include mythread my...

分頁的第二種方式

優點 1.十分簡潔 缺點 1.不能及時響應資料庫中變化 2.重複查詢較多,每獲取乙個屬性 總頁數 都要查詢資料庫 將某一頁的資料直接封裝在此類中,調乙個方法便可獲取資料。public class fengye 計算頁數 public int gettotalpages int count,int p...

ios第二種post請求

請求部分 nsurl url nsurl urlwithstring porturl gt ajax validate5 2.建立乙個網路請求,分別設定請求方法 請求引數 nsmutableurlrequest request nsmutableurlrequest requestwithurl u...