设计模式之策略模式
2015-09-18 10:46
232 查看
策略模式中:将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。
//strategy.h class Strategy{} public: Strategy(); virtual ~Strategy() { cout<<"straegy"<<endl; } virtual void AlgorithmInterface() =0; ;
//ConcreteStrategyA class ConcreteStrategyA:public Strategy{ public: ConreteStrategyA(); virtual ~ConcreteStrategyA(){ cout<<"~ConcreteStrategyA"<<endl; } void AlgorithmInterface(){ cout<<"AlgoA"<<endl; } } //ConcreteStrategyB class ConcreteStrategyB:public Strategy{ public: ConreteStrategyB(); virtual ~ConcreteStrategyB(){ cout<<"~ConcreteStrategyB"<<endl; } void AlgorithmInterface(){ cout<<"AlgoB"<<endl; } }
//Context class Context{ public: Context(Strategy *stg):m_stg(stg){} ~Context(){ if(!m_stg) delete m_stg; } void DoAction(){ m_stg->AlgorithmInterface(); } private: Strategy *m_stg; };
//test main int main(void){ Strategy *ps; ps = new StrategyA(); Context *pc = new Context(ps); pc->DoAction(); if(NULL != pc) delete pc; return 0; }
优点
1)“黑盒”复用,因为被包含对象的内部细节对外是不可见的;
2)封装性好,原因为 1);
3)实现和抽象的依赖性很小(组合对象和被组合对象之间的依赖性小);
4)可以在运行期间动态定义实现(通过一个指向相同类型的指针,典型的是抽象基类的指针。
缺点
系统中对象过多。
相关文章推荐
- Android中WebView载入本地HTML代码并实现交互
- ViewPager不能高度自适应?height=wrap_content 无效解决办法
- Box2D.js简易示例
- C#中的Webservice实例代码(vs2013)
- iOS mark
- Linux内核中的IPSEC实现(1)
- ESTABLISHED状态
- U-BOOT 移植过程详解:添加一块新板子的支持
- Java学习笔记06 String和基本数据类型
- Linux操作系统下源码阅读工具ctags+vim中ctags的安装
- SQL语句执行效率及分析(note)
- iOS学习笔记--如何实现登录按钮显示状态的改变
- linux 内核升级 网址参考
- Windows系统时间同步出错解决办法
- IOS第二天-新浪微博 - 添加搜索框,弹出下拉菜单 ,代理的使用 ,HWTabBar.h(自定义TabBar)
- 字符拆分存入Map计算单词的个数
- 【转】shell 教程——06 Shell变量:Shell变量的定义、删除变量、只读变量、变量类型
- 【JVM】关于垃圾回收
- 一些关于XE8无法连接安卓手机的解决方法
- Launcher的视图的构成