策略模式(C++)
标签:make 就是 条件选择 contex stream 算法实现 图片 http 条件
1. 介绍
目的: 定义一系列的算法(行为),把它们一个个封装起来,并且使它们可以互替换(继承接口).
关键: 实现同一个接口.
优点:
- 算法之间可以互相替换;
- 可以避免多重条件判断;
- 扩展性良好.
缺点:
使用场景:
- 一个对象可能存在多种行为,需要使用多重条件判断时;
- 系统需要在几种算法中选择一种.
2. UML图
3. 案例
#include
#include
//接口类
class Strategy{
public:
virtual int doOperate(const int a, const int b) = 0;
};
//算法实现1
class StrategyAdd : public Strategy{
public:
int doOperate(const int a, const int b) override {
return a+b;
}
};
//算法实2
class StrategySub : public Strategy{
public:
int doOperate(const int a, const int b) override {
return a-b;
}
};
//条件选择
class Context {
public:
Context(std::shared_ptr Strategy) : Strategy_(Strategy){}
std::shared_ptr GetStrategy() {
return Strategy_;
}
void SetStrategy(std::shared_ptr Strategy) {
Strategy_ = Strategy;
}
int doOperate(const int a, const int b) {
return Strategy_->doOperate(a, b);
}
private:
std::shared_ptr Strategy_;
};
int main() {
Context context(std::make_shared());
std::cout ());
std::cout
输出结果:
110
-90
其他
策略模式初看和工厂模式其实是有点像的,但是细看其实区别很大:
- 工厂模式是创建型模式,它的作用就是创建对象;策略模式是行为型模式,它的作用是让一个对象在许多行为中选择一种行为;
- 工厂模式关注对象创建,实际创建对象是被封装的,用户不可见;而策略模式更多是关注行为的替换,创建对象其实是对用户可见的.
当然也不要盲目追求设计模式,在行为类型并不多时,直接使用条件判断更加合理.
策略模式(C++)
标签:make 就是 条件选择 contex stream 算法实现 图片 http 条件
原文地址:https://www.cnblogs.com/xl2432/p/13129750.html
文章来自:
搜素材网的
编程语言模块,转载请注明文章出处。
文章标题:
策略模式(C++)
文章链接:http://soscw.com/index.php/essay/85139.html
评论