博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【设计模式】策略模式
阅读量:4563 次
发布时间:2019-06-08

本文共 2278 字,大约阅读时间需要 7 分钟。

 

 策略模式

关于策略模式,我的理解:有若干个策略(算法),有一个管理策略的类,该类的输入为策略,输入为不同的策略(算法),输出为该种策略(算法)对应的类对象(的动态类型),然后程序员手动去使用该类对象(的动态类型)去调用相应虚函数,根据多态机制实现执行不同的操作。

  

/************************************************************************设计模式2策略模式我们知道,一个公司里有若干个工种,每个工种做的工作是不同的,每种不同的工作就可以看作是一个一个的策略(算法),以此为例来描述策略模式。本文中有一个抽象基类【干活】类,三个子类【软件开发】、【市场拓展】【数据处理】,每个子类代表一种操作,一种算法,几种策略有一个用来管理各种策略的【TodoContext】上下文类,在此类中获取输入的策略的实际动态类型,在此类对外提给客户的接口中调用了该抽象基类(指针),去调用其虚函数完成操作。************************************************************************/

 

 

//【干活】抽象基类class CDoSomething{public:    CDoSomething();    virtual void DoSomething() const = 0;     virtual ~CDoSomething();};CDoSomething::CDoSomething(){}void CDoSomething::DoSomething()  const{    //do nothing}CDoSomething::~CDoSomething()

 

 

//【软件开发】类class CSoftDevelop : public CDoSomething{public:     CSoftDevelop();    virtual void DoSomething() const;    virtual ~CSoftDevelop();};CSoftDevelop::CSoftDevelop() {}void CSoftDevelop::DoSomething() const{    cout << "\r\n研发部去写代码去,快去! 滚!\r\n";}CSoftDevelop::~CSoftDevelop(){}

 

 

//【市场拓展】类class CBusinessDevelop : public CDoSomething{public:     CBusinessDevelop();    virtual void DoSomething() const;    virtual ~CBusinessDevelop();};CBusinessDevelop::CBusinessDevelop() {}void CBusinessDevelop::DoSomething() const{    cout << "\r\n市场部的兄弟们,最近业绩怎么样啊?什么?那还不快滚去出差!滚!\r\n";}CBusinessDevelop::~CBusinessDevelop(){}

 

 

//【数据处理】 类class CDataHandle : public CDoSomething{public:    CDataHandle( );    virtual void DoSomething() const;    virtual ~CDataHandle();};CDataHandle::CDataHandle() {}void CDataHandle::DoSomething() const{    cout << "\r\n数据处理部的,模型做完了吗? 什么?还差点? 还不快加班做! 滚!\r\n";}CDataHandle::~CDataHandle(){}

 

 

用来管理各种策略(算法,干什么活)的上下文类

//【ToDo上下文】类class CTodoContext {public:    //构造函数的参数为一个【干活】类指针,即一个策略(算法,干什么活)    CTodoContext(CDoSomething* ptr);    void DoSomething();  //此函数非虚,和【干活】类及其子类没有关系    virtual ~CTodoContext();protected:    CDoSomething* m_ptrDoSomething;};CTodoContext::CTodoContext(CDoSomething* ptr){    m_ptrDoSomething = ptr;}void CTodoContext::DoSomething(){    if (NULL != m_ptrDoSomething)         m_ptrDoSomething->DoSomething(); }CTodoContext::~CTodoContext(){    if(NULL != m_ptrDoSomething) delete m_ptrDoSomething;}

 

main函数及执行结果如下

 

 

 

下一篇文章写写【策略模式】和【简单工厂模式】的结合

  

 

 

转载于:https://www.cnblogs.com/cuish/p/3724044.html

你可能感兴趣的文章
python2计算cisco无线AP需要dhcp的option43
查看>>
Nginx+Tomcat实现https安全链接
查看>>
BZOJ 1093 强连通缩点+DAG拓扑DP
查看>>
设计模式 || 观察者模式
查看>>
H5视频播放器属性与API控件,以及对程序的解释
查看>>
010 异步处理Rest服务
查看>>
json.dumps python错误:'utf8' codec can't decode byte 0xe1 in position 5 解决方案
查看>>
P2505 [HAOI2012]道路
查看>>
wxs旅游增强
查看>>
HDOJ 1091
查看>>
STL排序算法
查看>>
增长率超 100%!东软数据可视化到底什么样?
查看>>
JSP表单提交中文乱码
查看>>
GoF23种设计模式之行为型模式之责任链模式
查看>>
拨号进入防盗界面
查看>>
makefile学习经验(二)----编译生成静态库文件
查看>>
python装饰器
查看>>
HDUOJ---2082
查看>>
【2018.2.8-】网络流学习笔记(含ISAP!)
查看>>
【2019.3.2】NOI 模拟赛
查看>>