策略模式【C++版】
来源:互联网 发布:淘宝支付宝转账被骗 编辑:程序博客网 时间:2024/06/06 03:19
原文链接 点击打开链接
一、 基本特点:
a)根据不同的情况,创建不同的对象
b)每个对象方法名相同,方法的实现差别很大
二、组成:
a)抽象策略: 1个
b)具体策略 多个,封装了相关的算法和行为
c)调度类: 持有一个具体策略类的引用,供客户端使用
三、代码实现:
#include<iostream>using namespace std;/*************************************策略基类****************************************/ class StrategyBase//主要定义了虚函数 { public: virtual void multiWay_tour()=0;//说明是纯虚函数(没有实现的虚函数),必须如此声明 };/*************************************具体策略类****************************************/ class StrategyFirstChild:public StrategyBase//策略子类,主要对父类定义的虚方法进行具体实现 { public: void multiWay_tour() { cout<<"I'll go tourism on feet"<<endl; } }; class StrategySecondChild:public StrategyBase//策略子类,主要对父类定义的虚方法进行具体实现 { public: void multiWay_tour() { cout<<"I'll go tourism by train"<<endl; } };/*************************************调度类****************************************/ class Context //调度类,根据传进来的参数,选择具体某个策略----待优化<参考教程> { private: StrategyBase *strategyChild; public: Context(StrategyBase *child) { strategyChild=child; } void multiWay_tour() { strategyChild->multiWay_tour(); } };/*************************************客户端****************************************/int main(){ cout<<"测试程序"<<endl; //“具体策略类”只在定义多个“调度类”时使用 Context *Context_A=new Context(new StrategyFirstChild()), *Context_B=new Context(new StrategySecondChild()), *Context_C=new Context(new StrategySecondChild()); //调用方法,只通过“调度类”实现,算法之间的差异已被屏蔽 Context_A->multiWay_tour(); Context_B->multiWay_tour(); Context_C->multiWay_tour(); cout<<endl; system("pause"); return 0;}运行结果:
四、策略模式与简单工厂模式对比:
简单工厂模式:根据不同的情况,创建不同的对象,对象之间类型差别较大,
有可能各个类的方法名和个数差别很大
注重不同对象的创建:根据不同的情况创建不同的对象(eg:下单,查资金等)
策略模式:根据不同的情况,创建不同的对象.对象不同类型相近,方法差别大. 尤其适合经
常变动的多种不同算法。 一般用于多个类的方法名都相同,但是实现方式不同
注重多个对象的相同行为:屏蔽方法名相同,算法实现细节不同之间的差异
(eg:txt、xml、dat、access四种格式的数据操作,读取,删除,修改)
0 0
- 策略模式(c++)
- 策略模式(C语言版)
- 【C++】Chapter2:策略模式
- Objective C--策略模式
- Objective C 策略模式
- Objective C--策略模式
- 策略模式(c++)
- object-c 策略模式
- <C/C++ 版> 设计模式 学习之 策略模式
- 策略模式C语言实现
- 策略模式——商城营销(C++,Qt版)
- 设计模式C++(Strategy策略模式)
- 设计模式C++(Strategy策略模式)
- C语言设计模式:策略模式
- C语言设计模式之策略模式
- <C/C++ 版> 设计模式 学习之 策略模式+工厂模式
- 策略模式【C++版】
- 策略模式【C++版】
- 胸怀,才是成功者的标志,大格局,抱怨没有意义
- c++ map<string,string>
- 用JavaScript修改CSS属性
- Java中super的几种用法并与this的区别
- EJB到底是什么?
- 策略模式【C++版】
- 遍历清空指定的控件
- JavaScript HTML DOM
- css user-select and box-sizing
- 对数据库三大范式及BC范式的理解
- 2013年12月编程语言排行榜:Transact-SQL是年度语言?
- VisualSVN.Server.v2.6.0安装包及注册机
- IO_STACK_LOACKTION结构体
- strlen函数实现的几种方法