設計模式(六)策略模式Strategy
意圖:定義一個系列演算法,把他們一個個封裝起來,並且使它們可互相替換。使得演算法可以獨立於使用它的客戶。
傳統C++方法實現:
#include <memory>
#include <iostream>
using namespace std;
class Strategy
{
public:
virtual void doAlgorithm(void)=0;
virtual ~Strategy(){}
protected:
};
class StrategyA : public Strategy
{
public:
void doAlgorithm(void){cout<<"StrategyA::doAlgorithm()"<<endl;}
};
class StrategyB : public Strategy
{
public:
void doAlgorithm(void){cout<<"StrategyB::doAlgorithm()"<<endl;}
};
class UseStrategy
{
public:
UseStrategy(shared_ptr<Strategy> ps):ps_(ps){}
void useAlgorithm(void)
{
shared_ptr<Strategy> ps = this->ps_.lock();
ps->doAlgorithm();
}
private:
weak_ptr<Strategy> ps_;
};
int main(int, char *[])
{
shared_ptr<Strategy> ps = make_shared<StrategyA>();
UseStrategy user(ps);
user.useAlgorithm();
//新增了一個演算法
ps = make_shared<StrategyB>();
UseStrategy user1(ps);
user1.useAlgorithm();
};
輸出:
StrategyA::doAlgorithm()StrategyB::doAlgorithm()
請按任意鍵繼續. . .
現代C++實現,參考std::function
相關文章
- 設計模式-策略模式(strategy pattern)設計模式
- 設計模式——13策略模式(strategy)設計模式
- Java設計模式之策略模式(Strategy)Java設計模式
- 設計模式筆記:策略模式(Strategy)設計模式筆記
- (Boolan)C++設計模式 ——策略模式(Strategy)C++設計模式
- 設計模式--策略模式Strategy(行為型)設計模式
- JS設計模式六:策略模式JS設計模式
- 1/24 設計模式之策略設計模式 Strategy Pattern設計模式
- 設計模式的征途—18.策略(Strategy)模式設計模式
- 【設計模式基礎】行為模式 - 5 - 策略(Strategy)設計模式
- 設計模式之策略模式和狀態模式(strategy pattern & state pattern)設計模式
- 【嵌入式c++】設計模式之策略模式(Strategy)C++設計模式
- 策略模式(Strategy)模式
- 策略模式【Strategy Pattern】模式
- 設計模式——策略模式設計模式
- 設計模式(策略模式)設計模式
- 設計模式-策略模式設計模式
- 設計模式🔫---策略模式設計模式
- 淺談策略模式(strategy)模式
- 設計模式之策略模式設計模式
- js設計模式--策略模式JS設計模式
- 小白設計模式:策略模式設計模式
- 設計模式之【策略模式】設計模式
- 設計模式(一) 策略模式設計模式
- php設計模式–策略模式PHP設計模式
- 設計模式(八)——策略模式設計模式
- 設計模式(四):策略模式設計模式
- 設計模式-策略模式(轉)設計模式
- 【設計模式之策略模式】設計模式
- 設計模式 #5 (策略模式、代理模式)設計模式
- [.net 物件導向程式設計深入](26)實戰設計模式——策略模式 Strategy (行為型)物件程式設計設計模式
- 06_Strategy Pattern 策略模式模式
- 【設計模式】漢堡中的設計模式——策略模式設計模式
- PHP 設計模式之策略模式PHP設計模式
- 設計模式(一) 支付策略模式設計模式
- JavaScript 設計模式之策略模式JavaScript設計模式
- 設計模式專題-策略模式設計模式
- Javascript設計模式之策略模式JavaScript設計模式