设计模式之策略模式,C++实现

来源:互联网 发布:图片矩阵 编辑:程序博客网 时间:2024/06/08 01:11

原创: http://blog.csdn.net/iuhsihsow


//策略模式
 //抽象出算法
 //可适应算放的频繁改动
 
 //问1:和简单工厂有什么区别?

//答1:策略模式主要是将算法提炼出来,一个大的context中可以包括多个算法,便于context中算法的的自由配置,
 //一次配置,多次使用,维持context的稳定性。
 //简单类工厂模式主要是用于创建一个完整的对象,级别和策略模式不同。
 //策略模式中可以包括一个工厂模式的抽象类的对象。


自己画的图,囧,将就吧



#include "stdafx.h"  class CashSuper { public: virtual double CalcCash() = 0; void SetOrginCash(double dOrgCash) { m_dOrgCash = dOrgCash; } protected: double m_dOrgCash; };  class CashReBate : public CashSuper { public: double CalcCash() { return m_dOrgCash * 0.85; } };  class CashReturn : public CashSuper { public: double CalcCash() { if (m_dOrgCash > 300) { return m_dOrgCash - 100; } else { return m_dOrgCash; } } };  class CashContext { public: double GetResult(double dMoney) { m_pCashSuper->SetOrginCash(dMoney); return m_pCashSuper->CalcCash(); } void SetCashSuper(CashSuper *pCashSuper) { m_pCashSuper = pCashSuper; } /*void ReleaseCashSuper() { if (m_pCashSuper) { delete m_pCashSuper; m_pCashSuper = NULL; } }*/ protected: CashSuper *m_pCashSuper;  };  int _tmain(int argc, _TCHAR* argv[]) { //现在商场进入打折季节,都使用打折suanfa CashSuper *pCSuper = new CashReBate; CashContext CContext; CContext.SetCashSuper(pCSuper); //CContext.SetCashSuper(new CashReturn) //CContext.ReleaseCashSuper(); double dPay = CContext.GetResult(100.0f);  if (pCSuper) { delete pCSuper; pCSuper = NULL; } return 0; } 


原创粉丝点击