【设计模式】策略模式

 

 策略模式

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

  

/************************************************************************
设计模式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://my.oschina.net/u/926461/blog/350849

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值