设计模式-行为模式-策略模式

策略模式与状态模式看起来差不多,只是从概念上侧重不同。策略模式封装的是策略或算法,状态模式封装的是状态,主要区别在于封装对象的不同形式。

以下代码定义了两种算法策略类。

#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;
    }
};

以下代码实现了策略的使用者类。

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对象切换策略,切换了其同一接口的算法实现。

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()
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。