-
1 簡介: 策略模式是一種行為型設計模式,用于在運行時根據不同的情況選擇不同的算法或行為。它將算法封裝成一個個具體的策略類,并使這些策略類可以相互替換,以達到動態改變對象的行為的目的。
-
2 實現步驟: 以下是使用C++實現策略模式的步驟:
a. 定義策略接口:首先,定義一個策略接口,該接口聲明了策略類中的算法方法。
class Strategy { public:virtual void doAlgorithm() = 0; };
b. 實現具體策略類:創建實現策略接口的具體策略類,每個具體策略類都實現了算法方法。
class ConcreteStrategyA : public Strategy { public:void doAlgorithm() override {// 具體策略A的算法實現} };class ConcreteStrategyB : public Strategy { public:void doAlgorithm() override {// 具體策略B的算法實現} };
c. 創建環境類:創建一個環境類,用于保存當前使用的策略對象,并且提供一個方法來改變策略對象。
class Context { private:Strategy* strategy;public:void setStrategy(Strategy* newStrategy) {strategy = newStrategy;}void executeAlgorithm() {strategy->doAlgorithm();} };
3?示例代碼: 以下是一個使用策略模式的示例代碼:
#include <iostream>int main() {// 創建環境對象Context context;// 創建具體策略AStrategy* strategyA = new ConcreteStrategyA();// 設置具體策略Acontext.setStrategy(strategyA);// 執行算法context.executeAlgorithm();delete strategyA;// 創建具體策略BStrategy* strategyB = new ConcreteStrategyB();// 設置具體策略Bcontext.setStrategy(strategyB);// 執行算法context.executeAlgorithm();delete strategyB;return 0; }
-
上述代碼中,客戶端可以根據需求選擇不同的具體策略來執行算法,通過改變策略對象,動態地改變行為。
-
4 優點:
- 算法的實現與客戶端解耦,增加代碼的靈活性和可維護性。
- 可以方便地擴展和添加新的策略類,符合開閉原則。
-
5 注意事項:
- 在使用策略模式時,需要確定出多個具體策略類之間的差異性和相似性,以及它們共同實現的策略接口。