設(shè)計模式-行為模式-策略模式

策略模式與狀態(tài)模式看起來差不多,只是從概念上側(cè)重不同。策略模式封裝的是策略或算法,狀態(tài)模式封裝的是狀態(tài),主要區(qū)別在于封裝對象的不同形式。

以下代碼定義了兩種算法策略類。

#include <iostream>

using namespace std;

class Strategy
{
public:
    virtual ~Strategy(){}
    virtual void AlgorithmInterface() = 0;
};

class ConcreteStrategyA:public Strategy
{
public:
    void AlgorithmInterface()
    {
        cout<<__PRETTY_FUNCTION__<<endl;
    }
};
class ConcreteStrategyB:public Strategy
{
public:
    void AlgorithmInterface()
    {
        cout<<__PRETTY_FUNCTION__<<endl;
    }
};

以下代碼實現(xiàn)了策略的使用者類。

class Context
{
private:
    Strategy* m_pStrategy;
public:
    Context(Strategy* strategy):m_pStrategy(strategy){}
    void SetStrategy(Strategy* strategy)
    {
        m_pStrategy = strategy;
    }
    void ContextInterface()
    {
        m_pStrategy->AlgorithmInterface();
    }
};

以下代碼演示了策略模式,通過對context對象切換策略,切換了其同一接口的算法實現(xiàn)。

int main(void){
    Strategy* strategyA = new ConcreteStrategyA();
    Strategy* strategyB = new ConcreteStrategyB();
    Context context(strategyA);
    context.ContextInterface();
    context.SetStrategy(strategyB);
    context.ContextInterface();
    delete strategyA;
    delete strategyB;
    return 0;
}

輸出

virtual void ConcreteStrategyA::AlgorithmInterface()
virtual void ConcreteStrategyB::AlgorithmInterface()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容