C 設計模式 Strategy策略模式

2021-06-23 01:17:08 字數 2315 閱讀 8614

strategy策略模式

作用:定義了演算法家族,分別封裝起來,讓他們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。

uml圖:

strategy模式將邏輯(演算法)封裝到乙個類(context)裡面,通過組合的方式將具體演算法的實現在組合物件中實現,再通過委託的方式將抽象介面的實現委託給組合物件實現

將演算法的邏輯抽象介面(doaction)封裝到乙個類中(context),再通過委託的方式將具體的演算法實現委託給具體的strategy類來實現(concretestrategea類)

stragegy類,定義所有支援的演算法的公共介面

concretestrategy,封裝了具體的演算法或行為,繼承於strategy

context,用乙個concretestrategy來配置,維護乙個對strategy物件的引用

策略模式是一種定義一系列演算法的方法,從概念上來看,所有這些演算法完成的都是相同的工作,只是實現不同,它可以以相同的方式呼叫所有的演算法,減少了各種演算法類於使用演算法類之間的耦合。

策略模式的strategy類層次為context定義了一系列的可供重用的演算法或行為。繼承有助於析取出這些演算法中的公共功能。

策略模式的優點是簡化了單元測試,因為每個演算法都有自己的類,可以通過自己的介面單獨測試。

策略模式就是用來封裝演算法的,但在實踐中,我們發現可以用它來封裝幾乎任何型別的規則,只要在分析過程中聽到需要在不同時間應用不同的業務規則,就可以考慮使用策略模式處理這種變化的可能性。

在基本的策略模式中,選擇所用具體實現的職責由客戶端物件承擔,並轉給策略模式的context物件。這本身並沒有解除客戶端需要選擇判斷的壓力。

**如下:

strategy.h

1

#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

strategy.cpp

1 #include "

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

main.cpp

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