策略模式
行為模式關注行為和演算法的封裝。
創造模式關注物件的建立,客戶端程式無權通過new的方式申請記憶體,構建物件。創造者模式提供方法供客戶端選擇。
Context 為實際演算法的呼叫者,Strategy為演算法的統一對外介面,不同的演算法對其有不同的實現。
Context只需依賴不同的演算法,就可以通過統一的Startegy介面,來實現演算法之間的呼叫。
Strategy通常使用抽象類來實現,抽出演算法中公共的邏輯程式碼,避免程式碼重複
策略模式結構解析
- Context: 對策略進行二次封裝,避免高層程式碼直接對策略邏輯進行呼叫。
- AbstractStrategy: 為環境類提供統一對外介面;對演算法的公共邏輯進行封裝,避免程式碼重複。
- StrategyA,StrategyB: 具體的策略,根據注入的不同進行切換。
Tips: 善用抽象類,模板模式來進行解耦,增加程式碼之間呼叫的靈活性。
策略模式優點
- 支援開放封閉原則,可以靈活的增加其他策略,也可以方便的修改某一個演算法的邏輯。
- 避免多重判斷條件,不利於後期維護。
策略模式缺點
- 必須暴露所有的策略,供客戶端程式選擇呼叫。程式的關聯性太強。
- 程式碼量大量增加。