乙個問題,有三種解決方法,每種解決方法,適用於不同的場景,靈活設計切換每種解決方法來解決該問題,並可新增解決方法。
要能靈活的切換解決問題的方法,且能夠靈活新增方法。
strategy.h
在該檔案中,實現了策略的基類,及三個策略的子類
#pragma once
#include //策略基類
class istrategy
virtual ~istrategy()
virtual void algorithminte***ce() = 0;
};//策略a類
class cconcretestrategya : public istrategy
virtual ~cconcretestrategya()
void algorithminte***ce() };
//策略b類
class cconcretestrategyb : public istrategy
virtual ~cconcretestrategyb()
void algorithminte***ce() };
//策略c類
class cconcretestrategyc : public istrategy
virtual ~cconcretestrategyc()
void algorithminte***ce()
};
question.h
問題類
#pragma once
#include "strategy.h"
class cquestion
virtual ~cquestion()
void setstrategy(istrategy* pstrategy)
void solve()
private:
istrategy* m_pstrategy;
};
main.cpp
// main.cpp : 定義控制台應用程式的入口點。
//#include "question.h"
int main()
//用策略b解決該問題
istrategy* pstrategyb = new(std::nothrow) cconcretestrategyb();
if (nullptr != pstrategyb)
//用策略c解決該問題
istrategy* pstrategyc = new(std::nothrow) cconcretestrategyc();
if (nullptr != pstrategyc)
system("pause");
return 0;
}
執行結果
策略模式:它定義了演算法家族,分別封裝起來,讓他們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。
策略模式是一種定義一些列演算法的方法,從概念上來看,所有這些演算法完成的都是相同的工作,只是實現不同,他可以以相同的方式呼叫所有的演算法,減少了各種演算法類與使用演算法類之間的耦合。如果要新增解決問題的方法,只需新增新的策略子類。
在不同場景下需要切換不同的解決問題的方法。
返回目錄:設計模式(c++實現)(總)
設計模式 策略模式C 實現
strategy pattern 定義一組演算法,將每個演算法都封裝起來,並且使他們可以相互替換 也叫政策模式 class strategy protected strategy public virtual strategy 0 virtual void dosomething 0 class c...
設計模式C 實現二 策略模式
策略模式 strategy 定義演算法家族,分別封裝起來,讓這些演算法直接可以相互替換,我們可以自由新增或者修改演算法而不會影響客戶.優點 簡化了單元測試,因為每個演算法都有自己的類,可以通過自己的介面單獨測試。如果我們在客戶端為了判斷使用哪個演算法而使用switch語句來分析,我們可以使用策略模式...
設計模式C 實現(2) 策略模式
對外的介面一樣,只是各自實現上存在差異。用策略模式來封裝演算法,效果比較好。下面以快取記憶體 cache 的替換演算法為例,實現策略模式。抽象介面 class replacealgorithm 三種具體的替換演算法 class lru replacealgorithm public replacea...