Strategy模式的具体实现
来源:互联网 发布:计算机软件编程 编辑:程序博客网 时间:2024/05/17 01:12
看了下,Strategy模式,很是安慰,觉得该模式不用脑子去记了,因为这个模式跟Bridge模式好像是一样的,至少这两个在接收指针对象上的区别我没怎么看出来,但是跟
Template模式相比,我觉得吧,他没有实现算法框架的封装,但是人家说了这也算是设计模式的一种,也就这样了,也许我根本没看懂??看完这篇只记得一句话,
favor composition over inheritance(组合优于继承),因为继承是一种较强的约束,同时也比较容易暴漏其内部结构,而对象组合,则不存在这样的诟病。
1、策略模式,拥有一个Context类,真实需要功能的类,或者我们可以这样说Context类,需要算法实现的结果而Strategy类则是一个接口,所有需要实现的公开接口都在Strategy中进行定义,而Strategy的具象子类则是根据不同的情况进行对该接口的不同实现!!!!
2、Context中会有一个Strategy的类型指针,根据面对的不同状况去申请不同的具体子类,然后实现具有细微差别的功能!!!!但是这样带来一个问题就是客户端需要了解具体的情况去申请不同的具象子类才行,这就会暴露些许细节!!!这是缺点
#include<iostream>using namespace std;class Strategy{ public: virtual void AlgrithmInterface()=0; Strategy() {;} ~Strategy() {;}};class ConcreteStrategy1:public Strategy{ public: ConcreteStrategy1() {;} ~ConcreteStrategy1() {;} public: void AlgrithmInterface() { cout<<"ConcreteStrategy1::AlgrithmInterface\n"; }};class ConcreteStrategy2:public Strategy{ public: ConcreteStrategy2() {;} ~ConcretegyStrategy2() {;} void AlgrithmInterface() { cout<<"ConcreteStrategy2::AlgrithmInterface\n";}};class Context{ private: Strategy* m_strategy_ptr; public: Context(Strategy* tmp) { m_strategy_ptr=tmp; } ~Context() { if(m_strategy_ptr!=NULL) { delete m_strategy_ptr; m_strategy_ptr=NULL; } } void DoAction() { m_strategy_ptr->AlgrithmInterface(); }}; int main(){ Strategy* tmp=new ConcreteStrategy1(); Context * con=new Context(tmp); con->DoAction(); Strategy* tmp2=new ConcreteStrategy2(); Context* con2=new COntext(tmp2); con2->DoAction(); delete con; delete con2; }
- Strategy模式的具体实现
- Strategy模式C++实现
- ReentrantReadWriteLock的Strategy模式
- 装饰模式(Decorator)的具体实现
- 代理模式PROXY的具体实例实现
- C++ 单例模式的具体实现
- 状态模式的具体实现 情景一
- 状态模式的具体实现 情景二
- 状态模式的具体实现 情景三
- C++实现策略(Strategy)模式
- C++实现Behavioral - Strategy模式
- C++实现Behavioral - Strategy模式
- Java 实现策略(Strategy)模式
- 有趣的Java - 简单使用enum实现策略模式Strategy
- 设计模式之strategy模式(C++实现)
- C++设计模式实现--策略(Strategy)模式
- [GoF设计模式]Proxy模式和Strategy模式的C++实现
- 常见设计模式的解析和实现(C++)之十六-Strategy模式
- java环境变量设置以及安装tomcat
- [mark]vs2012编译qt4.8.5
- mochiweb 初探
- poj1160 Post Office 四边形优化dp
- 解决FlashBuilder提示Fail to create the Java Virtual Machine
- Strategy模式的具体实现
- 10个有用的第三方iOS开源库
- Linq to sql :查询句法
- 在VirtualBox下安装CentOS教程(截图版)
- Linux Bash Shell入门教程
- POJ1236_Network of Schools_强连通分量_Korasaju算法
- poj 1159 Palindrome
- 《初学cocos2d-x》- 动画CCAnimation(2)
- Redis String类型数据常用的16条命令总结