設計模式 策略模式C 實現

2022-07-21 18:24:10 字數 1171 閱讀 1114

(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...