策略模式定義:
策略模式(strategy):它定義了演算法家族,分別封裝起來,讓他們之間可以相互替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。策略模式結構圖:
意圖:定義一系列的演算法,把它們乙個個封裝起來, 並且使它們可相互替換。
主要解決:在有多種演算法相似的情況下,使用 if…else 所帶來的複雜難以維護。
何時使用:乙個系統有許多許多類,而區分它們的只是他們直接的行為。
如何解決:將這些演算法封裝成乙個乙個的類,任意地替換。
關鍵**:實現同乙個介面 - 策略方法
優點:
演算法可以自由切換。
避免使用多重條件判斷。
擴充套件性良好。
缺點:
策略類會增多。
所有策略類都需要對外暴露。
使用場景:
如果在乙個系統裡面有許多類,它們之間的區別僅在於它們的行為,那麼使用策略模式可以動態地讓乙個物件在許多行為中選擇一種行為。
乙個系統需要動態地在幾種演算法中選擇一種。
如果乙個物件有很多的行為,如果不用恰當的模式,這些行為就只好使用多重的條件選擇語句來實現。
注意事項:如果乙個系統的策略多於四個,就需要考慮使用混合模式,解決策略類膨脹的問題。
#include
using
namespace std;
// 抽象演算法類
class
strategy
;virtual
void
algorithminte***ce()
=0;}
;// 具體演算法a
class
concretestrategya
:public strategy
void
algorithminte***ce()
};// 具體演算法b
class
concretestrategyb
:public strategy
void
algorithminte***ce()
};// 具體演算法c
class
concretestrategyc
:public strategy
void
algorithminte***ce()
};// 上下文
class
context
// 上下文方法 - 根據具體的策略物件呼叫其演算法的方法
void
contextinte***ce()
private
: strategy* strategy;};
intmain()
執行結果:
演算法a實現...
演算法b實現...
演算法c實現.
..
需求:除了正常的支付找零之外,還會有活動打折、滿減返利等等優惠活動。
設計:
c 實現策略模式
策略模式 strategy 它定義了演算法家族,分別封裝起來,讓他們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。上面是 大話設計模式 中給出的定義,感覺這個概念給的不好,看了之後不能完全清晰明白該模式 可能自己水平太水的原因吧 在 effective c 中指出,策略模式是v...
策略模式 C 實現
include include include 問題 和工廠模式的本質區別?using namespace std abstract sort class strategy class class super sort virtual void sort int a,int l,int r conc...
C 策略模式實現
策略模式 它定義了演算法家族,分別封裝起來,讓它們之間可以相互替換,此模式讓演算法的變化,不會影響到使用的客戶。strategy.cpp 定義控制台應用程式的入口點。include stdafx.h includeusing namespace std class strategy class co...