C 設計模式 策略模式 Strategy

2021-09-05 07:35:11 字數 2475 閱讀 9852

策略模式+簡單工廠模式**舉例

1.簡單工廠模式實現

簡單工廠模式我需要讓客戶端認識兩個類,cashsuper和cashfactory

2.策略模式+簡單工廠模式實現

而策略模式我只需要給客戶端暴露cashcontext類即可,耦合更加降低了,

#ifndef strategy_h

#define strategy_h

class strategy

;class concretestrategya:public strategy

void algorithminte***ce();

};class concretestrategyb:public strategy

void algorithminte***ce();

};class concretestrategyc:public strategy

void algorithminte***ce();

};class context

;#endif // strategy_h

#include "strategy.h"

#include using namespace std;

strategy::strategy()

void concretestrategya::algorithminte***ce()

//再根據具體的策略物件來呼叫其演算法介面

void context::contextinte***ce()

#include #include "strategy.h"

using namespace std;

int main()

#ifndef strategy_h

#define strategy_h

enum algorithmmode

;class strategy

;class concretestrategya:public strategy

void algorithminte***ce();

};class concretestrategyb:public strategy

void algorithminte***ce();

};class concretestrategyc:public strategy

void algorithminte***ce();

};class context

;#endif // strategy_h

#include "strategy.h"

#include using namespace std;

strategy::strategy()

void concretestrategya::algorithminte***ce()

//簡單工廠模式:封裝了物件的建立的介面

context::context(int algorithmmode)

}//再根據具體的策略物件來呼叫其演算法介面

上述**顯示策略模式+工廠模式,客戶端只要管理乙個類:context即可,呼叫的contextinte***ce(),這樣就徹底把演算法和客戶端分離出來了,耦合度更低

策略模式就是用來封裝演算法的,但在實踐中,我們發現可以用來封裝幾乎任何型別的規則,只要在分析的過程中聽到:需要在不同的時間對應不同的業務規則,就可以考慮用策略模式處理這種變化的可能性,但是在基本的策略模式中,選擇所用的具體實現的職責由客戶端物件承擔,並轉給策略模式的context物件,這本身並沒有解除客戶端需要判斷的壓力,而策略模式+簡單工廠模式後,選擇具體實現的職責可以由context來承擔,這樣就最大化的減輕了客戶端的職責

c 設計模式 策略模式

策略模式,看完策略模式最大的感受就是將所有的演算法封裝起來,讓它們之間可以相互替換,這個模式讓演算法的變化不會影響到使用者。我寫的例子還是之前的那個簡易計算器,策略模式可以和簡單工廠模式結合,在客戶端中只需認識乙個concent類,將所有的演算法物件建立以及演算法的使用全部封裝在乙個類中,即conc...

C 設計模式 策略模式

策略模式 定義了演算法家族,分別封裝起來,然後定義乙個統一的藉口,演算法之間可以相互替換。使用該模式可以讓演算法的變化不影響到使用演算法的客戶。模式實現 策略模式具體實現時通常與工廠模式相結合,定義乙個工廠類,來決定初始化哪個演算法。如下 include using namespace std en...

C 設計模式 策略模式

c 設計模式 策略模式 策略模式就是將多種演算法類進行封裝,每個演算法類都繼承於乙個基類a,然後重寫乙個新類b,在這個新類裡定義乙個基類a的物件,然後在新類b的建構函式中對基類a的物件進行賦值,這種方法需要對b的建構函式傳引數,如果需要不傳引數,則可以寫成模板的形式,以下是 include usin...