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

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

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

#include 

using namespace std;

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

class ConcreteStrategyA:public Strategy
{
public:
    void AlgorithmInterface()
    {
        cout<<__PRETTY_FUNCTION__<

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

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()

你可能感兴趣的:(设计模式-行为模式-策略模式)