意圖:定義一系列的演算法,把它們乙個個封裝起來, 並且使它們可相互替換
主要解決:在有多種演算法相似的情況下,使用 if…else 所帶來的複雜和難以維護。
何時使用:乙個系統有許多許多類,而區分它們的只是他們直接的行為。
如何解決:將這些演算法封裝成乙個乙個的類,任意地替換。
關鍵**:實現同乙個介面。
優點:
1、演算法可以自由切換。
2、避免使用多重條件判斷。
3、擴充套件性良好。
缺點:
1、策略類會增多。
2、所有策略類都需要對外暴露。
使用場景:
1、如果在乙個系統裡面有許多類,它們之間的區別僅在於它們的行為,那麼使用策略模式可以動態地讓乙個物件在許多行為中選擇一種行為。
2、乙個系統需要動態地在幾種演算法中選擇一種。
3、如果乙個物件有很多的行為,如果不用恰當的模式,這些行為就只好使用多重的條件選擇語句來實現。
#include
using
namespace std;
//抽象演算法類:定義所有支援的演算法的公共介面
class
strategy
;//具體演算法a:封裝了具體的演算法或行為,繼承於抽象演算法類
class
concretestrategya
:public strategy};
//具體演算法b:封裝了具體的演算法或行為,繼承於抽象演算法類
class
concretestrategyb
:public strategy};
//具體演算法c:封裝了具體的演算法或行為,繼承於抽象演算法類
class
concretestrategyc
:public strategy};
//在策略模式中,我們建立表示各種策略的物件和乙個行為隨著策略物件改變而改變的 context 物件。策略物件改變 context 物件的執行演算法。
//context 類:維護乙個對抽象演算法類物件的引用
class
context
void
contextinte***ce()
};//由於例項化不同的策略,最終在呼叫context->contextinte***ce()時,所獲得的結果就不盡相同。
intmain()
設計模式 策劃模式(C ) 商場收費系統
用策略模式實現商場收費系統 include using namespace std 現金收費抽象類 抽象產品 抽象產品角色是所建立的所有物件的父類,負責描述所有例項所共有的公共介面 class cashsuper 具體產品 具體產品角色 子類 是建立目標,所有建立的物件都充當這個角色的某個具體類的例...
設計模式C 實現 組合模式
這個模式能夠建立乙個樹形結構,在同乙個結構中處理巢狀選單和選單項組。通過選單和項放在相同結構中,我們建立了乙個 整體 部分 層次結構,即由選單和選單項組成的物件樹。使用組合結構,我們能把相同的操作應用在組合和個別物件上。換句話說,在大多數情況下,我們可以忽略物件組合和個別物件之間的差別。為組合中的物...
設計模式 外觀模式(C 實現)
通常某乙個操作的初始化依賴於很多步驟,我們可以把此步驟進行封裝做成乙個類 通過這個類的初始化操作中 對依賴的物件進行建立,然後返回建立此型別的指標 然後在外觀類中完成這些函式的呼叫工作 適用於 為子系統中統一一套介面,讓子系統更加容易使用。include using namespace std cl...