策略模式与状态模式看起来差不多,只是从概念上侧重不同。策略模式封装的是策略或算法,状态模式封装的是状态,主要区别在于封装对象的不同形式。
以下代码定义了两种算法策略类。
#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()
网友评论