(strategy pattern)定義一組演算法,將每個演算法都封裝起來,並且使他們可以相互替換
也叫政策模式
class strategy
{protected:
strategy();
public:
virtual ~strategy() = 0;
virtual void dosomething()=0;
class concretestrategy1:public strategy
public:
void dosomething()
cout << "具體策略1的運算法則"
public:
void dosomething()
cout << "具體策略1的運算法則"/封裝角色
class context
private:
strategy * _str;
public:
context(strategy * st)
:_str(st)
void doanything()
_str->dosomething();
void test
strategy * st = new concretestrategy1();
context *con = new context(st);
con->doanything();
①優點演算法可以自由切換
避免使用多重條件判斷.將決策權轉接給高層,你傳入策略我執行該就可以
擴充套件性良好
②缺點策略數量增多
所有的策略類都會暴漏在外,上層必須知道具體策略
注:這個缺點是可以通過其他方式進行彌補的eg工廠方法,**模式,享元模式
多個類只有在演算法上稍有不同
演算法需要自由切換
需要遮蔽演算法規則的地方。(仿函式類似)
注意事項,乙個策略家族的具體策略數量不得超過4個,否則使用混合模式解決策略類膨脹和對外暴漏的問題。
列舉策略
定義:它是乙個列舉,濃縮了策略模式的列舉
列舉特性:pubic,finaly,static
所以在c++中其實就是乙個乙個類封裝多個靜態方法。(一半用作不經常改變的角色)
eg strategy::add();
strategy::sub();....
設計模式C 實現二 策略模式
策略模式 strategy 定義演算法家族,分別封裝起來,讓這些演算法直接可以相互替換,我們可以自由新增或者修改演算法而不會影響客戶.優點 簡化了單元測試,因為每個演算法都有自己的類,可以通過自己的介面單獨測試。如果我們在客戶端為了判斷使用哪個演算法而使用switch語句來分析,我們可以使用策略模式...
設計模式C 實現(2) 策略模式
對外的介面一樣,只是各自實現上存在差異。用策略模式來封裝演算法,效果比較好。下面以快取記憶體 cache 的替換演算法為例,實現策略模式。抽象介面 class replacealgorithm 三種具體的替換演算法 class lru replacealgorithm public replacea...
設計模式(C 實現)(十六) 策略模式
乙個問題,有三種解決方法,每種解決方法,適用於不同的場景,靈活設計切換每種解決方法來解決該問題,並可新增解決方法。要能靈活的切換解決問題的方法,且能夠靈活新增方法。strategy.h 在該檔案中,實現了策略的基類,及三個策略的子類 pragma once include 策略基類 class is...