介绍
在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。
参与者
Strategy 策略基类
ConcreteStrategy 具体策略
Context 具体使用策略的对象
实现代码
#include <iostream>
class Strategy{//Strategy 策略基类
public:
virtual void DoStrategy() = 0;
};
class StrategyA:public Strategy{//ConcreteStrategy 具体策略
public:
void DoStrategy() override
{
std::cout<<"使用策略 A"<<std::endl;
}
};
class StrategyB:public Strategy{//ConcreteStrategy 具体策略
public:
void DoStrategy() override
{
std::cout<<"使用策略 B"<<std::endl;
}
};
class Context {//Context 具体使用策略的对象
public:
explicit Context(Strategy *state1)
{
state = state1;
}
void Work()
{
state->DoStrategy();
}
private:
Strategy *state;
};
int main()
{
auto context1 = new Context(new StrategyA());
context1->Work();
auto context2 = new Context(new StrategyB());
context2->Work();
}
输出结果
使用策略 A
使用策略 B
感觉跟状态模式差不多
特点
- 算法可以自由切换
- 避免使用多重条件判断
- 扩展性良好
- 策略类会增多
- 所有策略类都需要对外暴露。
参考
- 《设计模式:可复用面向对象软件的基础》