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

原创: 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;
 }
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值