model
implement
strategy
class Strategy
{
public:
Strategy();
virtual ~Strategy();
public:
virtual void AlgrithmInterface() = 0;
};
class Strategy
{
public:
Strategy();
virtual ~Strategy();
public:
virtual void AlgrithmInterface() = 0;
};
concrete strategy
class ConcreteStrategyA : public Strategy
{
public:
ConcreteStrategyA();
~ConcreteStrategyA();
public:
void AlgrithmInterface();
};
class ConcreteStrategyB : public Strategy
{
public:
ConcreteStrategyB();
~ConcreteStrategyB();
public:
void AlgrithmInterface();
};
ConcreteStrategyA::ConcreteStrategyA()
{
}
ConcreteStrategyA::~ConcreteStrategyA()
{
}
void ConcreteStrategyA::AlgrithmInterface()
{
cout << "ConcreteStrategyA AlgrithmInterface..." << endl;
}
ConcreteStrategyB::ConcreteStrategyB()
{
}
ConcreteStrategyB::~ConcreteStrategyB()
{
}
void ConcreteStrategyB::AlgrithmInterface()
{
cout << "ConcreteStrategyB AlgrithmInterface..." << endl;
}
context
class Context
{
public:
Context(Strategy* stg);
~Context();
public:
void DoAction();
private:
Strategy* _stg;
};
Context::Context(Strategy* stg)
{
_stg = stg;
}
Context::~Context()
{
delete _stg;
}
void Context::DoAction()
{
_stg->AlgrithmInterface();
}
应用
void strategy_test()
{
Strategy* stg = new ConcreteStrategyA();
Context* ctx = new Context(stg);
ctx->DoAction();
}
总结
- 抽象:concrete strategy的公共基类strategy进行了抽象
- 扩展:concrete strategy可以进行扩展
- context提供了公共接口,strategy提供了功能接口,concrete strategy实现功能接口
- 开发者不需要知道concrete strategy,开发者只与公共基类strategy和context交互