设计模式读书笔记:Strategy(策略)
2015-07-10 21:34
495 查看
意图:
定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。
结构图:来自 《23种设计模式 - 郗晓勇》
![](http://img.blog.csdn.net/20150710213020034)
实现:https://github.com/panshiqu/patterns/tree/master/Strategy
Context
定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。
结构图:来自 《23种设计模式 - 郗晓勇》
实现:https://github.com/panshiqu/patterns/tree/master/Strategy
Context
#include <iostream> #include "Strategy.h" namespace NS_STRATEGY { class Context { public: Context() : _strategy(0) {} virtual ~Context() {} void contextInterface(void) { int a, b; std::cout << "a="; std::cin >> a; std::cout << "b="; std::cin >> b; if (_strategy) _strategy->algorithmInterface(a, b); } void setStrategy(Strategy *strategy) { _strategy = strategy; } private: Strategy *_strategy; }; } /* namespace NS_STRATEGY */Strategy
namespace NS_STRATEGY { class Strategy { public: Strategy() {} virtual ~Strategy() {} virtual void algorithmInterface(int a, int b) = 0; }; } /* namespace NS_STRATEGY */ConcreteStrategyA
#include <iostream> #include "Strategy.h" namespace NS_STRATEGY { class ConcreteStrategyA : public Strategy { public: ConcreteStrategyA() {} virtual ~ConcreteStrategyA() {} virtual void algorithmInterface(int a, int b) { std::cout << "a+b = " << a+b << std::endl; } }; } /* namespace NS_STRATEGY */ConcreteStrategyB
#include <iostream> #include "Strategy.h" namespace NS_STRATEGY { class ConcreteStrategyB : public Strategy { public: ConcreteStrategyB() {} virtual ~ConcreteStrategyB() {} virtual void algorithmInterface(int a, int b) { std::cout << "a-b = " << a-b << std::endl; } }; } /* namespace NS_STRATEGY */main
#include "Strategy/Context.h" #include "Strategy/ConcreteStrategyA.h" #include "Strategy/ConcreteStrategyB.h" using namespace NS_STRATEGY; int main(void) { Context c; ConcreteStrategyA csa; ConcreteStrategyB csb; c.setStrategy(&csa); c.contextInterface(); c.setStrategy(&csb); c.contextInterface(); }附加:
相关文章推荐
- 这些注释太可爱啦!我也要加到我的项目中去!
- 最少步数(bfs)
- 使用迅雷下载百度网盘大文件
- 重新制定了目标 这样才知道为啥活着 重新起航 星辰大海
- 线段树
- ubuntu14.04下安装pycharm以及Oracle JDK
- 第2章 字符和字符串处理(2)
- Intent中的四个重要属性——及部分对应值
- hadoop学习(10)----map端的执行过程
- 【poi1999】【cogs239】【积水】【堆】【灌水法】【贪心】
- DOM 操作技术之动态脚本
- Unity学习笔记 之 关于 Unity UI 的 Slider 的代码记录
- Hadoop 之 WritableComparable 接口
- java注解
- CISCO服务器配置RAID步骤
- 为什么C++中空类和空结构体大小为1?
- hdu 1392
- hdu(1016)
- hdu2222
- Atitit.执行cmd 命令行 php