strategy策略模式
作用:定義了演算法家族,分別封裝起來,讓他們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。
uml圖:
strategy模式將邏輯(演算法)封裝到乙個類(context)裡面,通過組合的方式將具體演算法的實現在組合物件中實現,再通過委託的方式將抽象介面的實現委託給組合物件實現
將演算法的邏輯抽象介面(doaction)封裝到乙個類中(context),再通過委託的方式將具體的演算法實現委託給具體的strategy類來實現(concretestrategea類)
stragegy類,定義所有支援的演算法的公共介面
concretestrategy,封裝了具體的演算法或行為,繼承於strategy
context,用乙個concretestrategy來配置,維護乙個對strategy物件的引用
策略模式是一種定義一系列演算法的方法,從概念上來看,所有這些演算法完成的都是相同的工作,只是實現不同,它可以以相同的方式呼叫所有的演算法,減少了各種演算法類於使用演算法類之間的耦合。
策略模式的strategy類層次為context定義了一系列的可供重用的演算法或行為。繼承有助於析取出這些演算法中的公共功能。
策略模式的優點是簡化了單元測試,因為每個演算法都有自己的類,可以通過自己的介面單獨測試。
策略模式就是用來封裝演算法的,但在實踐中,我們發現可以用它來封裝幾乎任何型別的規則,只要在分析過程中聽到需要在不同時間應用不同的業務規則,就可以考慮使用策略模式處理這種變化的可能性。
在基本的策略模式中,選擇所用具體實現的職責由客戶端物件承擔,並轉給策略模式的context物件。這本身並沒有解除客戶端需要選擇判斷的壓力。
**如下:
strategy.h
1strategy.cpp#ifndef _strategy_h_
2#define _strategy_h_34
class
strategy5;
1314
class concretestrategya : public
strategy15;
2324
class concretestrategyb : public
strategy25;
3334
/*這個類是strategy模式的關鍵,
35也是strategy模式和template模式的根本區別所在。
36*strategy通過「組合」(委託)方式實現演算法(實現)的異構,
37而template模式則採取的是繼承的方式
38這兩個模式的區別也是繼承和組合兩種實現介面重用的方式的區別
39*/
40class
context41;
49#endif
1 #include "main.cppstrategy.h
"2 #include "
iostream"3
4using
namespace
std;56
strategy::strategy()7{}
89 strategy::~strategy()
10{}
1112
concretestrategya::concretestrategya()
13{}
1415 concretestrategya::~concretestrategya()
16{}
1718
void
concretestrategya::algrithminte***ce()
1922
23concretestrategyb::concretestrategyb()
24{}
2526 concretestrategyb::~concretestrategyb()
27{}
2829
void
concretestrategyb::algrithminte***ce()
3033
34 context::context(strategy*strategy)
3538
39 context::~context()
4043
44void
context::doaction()
45
1 #include "strategy.h"2
3int
main()
4
C 設計模式 Strategy策略模式
strategy策略模式 作用 定義了演算法家族,分別封裝起來,讓他們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。uml圖 strategy模式將邏輯 演算法 封裝到乙個類 context 裡面,通過組合的方式將具體演算法的實現在組合物件中實現,再通過委託的方式將抽象介面的實...
C 設計模式 策略模式 Strategy
策略模式 簡單工廠模式 舉例 1.簡單工廠模式實現 簡單工廠模式我需要讓客戶端認識兩個類,cashsuper和cashfactory 2.策略模式 簡單工廠模式實現 而策略模式我只需要給客戶端暴露cashcontext類即可,耦合更加降低了,ifndef strategy h define stra...
策略設計模式(strategy)
策略模式定義了一系列演算法,並將每個演算法封裝起來,使他們可以相互替換,且演算法的變化不會影響到使用演算法的客戶。需要設計乙個介面,為一系列實現類提供統一的方法,多個實現類實現該介面,設計乙個抽象類 可有可無,屬於輔助類 提供輔助函式 統一介面 public inte ce icalculator ...