大话设计模式——策略模式(C++实现)
来源:互联网 发布:淘宝消保加入步骤图 编辑:程序博客网 时间:2024/04/28 02:23
用C++实现了《大话设计模式》中的策略模式(Strategy)
Strategy.h:
#ifndef _STRATEGY_H#define _STRATEGY_H#include <iostream>using namespace std;class CCashBase{public:virtual double ReturnMoney(double money)=0;protected:private:};class CCashNomal : public CCashBase{public:double ReturnMoney(double money);protected:private:};class CCRebate : public CCashBase{public:CCRebate(double rebate):m_dMoneyRebate(rebate){};double ReturnMoney(double money);protected:private:double m_dMoneyRebate;};class CCReturn : public CCashBase{public:CCReturn(double moneyCondition,double moneyReturn):m_dMoneyCondition(moneyCondition),m_dMoneyReturn(moneyReturn){};double ReturnMoney(double money);protected:private:double m_dMoneyCondition,m_dMoneyReturn;};//策略模式class CCashContext1{public:CCashContext1(CCashBase *cb);double GetResult(double money);protected:private:CCashBase *m_pCB;};//策略与简单工厂模式结合class CCashContext2{public:CCashContext2(int i);double GetResult(double money);protected:private:CCashBase *m_pCB;};#endif
Strategy.cpp:
#include "Strategy.h"/************************************************************************//* CCashNomal类 *//************************************************************************/double CCashNomal::ReturnMoney( double money ){return money;}/************************************************************************//* CCRebate类 *//************************************************************************/double CCRebate::ReturnMoney( double money ){return money * m_dMoneyRebate;}/************************************************************************//* CCReturn类 *//************************************************************************/double CCReturn::ReturnMoney( double money ){double result = money;if (money >= m_dMoneyCondition)result = money - int(money/m_dMoneyCondition) * m_dMoneyReturn;return result;}/************************************************************************//* CCashContext1类 *//************************************************************************/CCashContext1::CCashContext1( CCashBase *cb ){m_pCB = cb;}double CCashContext1::GetResult( double money ){return m_pCB->ReturnMoney(money);}/************************************************************************//* CCashContext2类 *//************************************************************************/CCashContext2::CCashContext2( int i ){switch(i){case 1:m_pCB = new CCashNomal;break;case 2:m_pCB = new CCReturn(300,100);break;case 3:m_pCB = new CCRebate(0.8);break;default:m_pCB = new CCashNomal;}}double CCashContext2::GetResult( double money ){return m_pCB->ReturnMoney(money);}
#include <iostream>#include "Strategy.h"using namespace std;int main(){//策略模式CCashContext1 *pCT1 = NULL;cout<<"请选择折扣:"<<endl;cout<<"1.正常"<<endl;cout<<"2.满300返100"<<endl;cout<<"3.打8折"<<endl;int i;cin>>i;switch (i){case 1:pCT1 = new CCashContext1(new CCashNomal);break;case 2:pCT1 = new CCashContext1(new CCReturn(300,100));break;case 3:pCT1 = new CCashContext1(new CCRebate(0.8));break;default:pCT1 = new CCashContext1(new CCashNomal);}cout<<pCT1->GetResult(500)<<endl;//策略与简单工厂模式结合//客户端只需要认识一个CCashContext2类,耦合更加降低CCashContext2 *pCT2 = new CCashContext2(i);cout<<pCT2->GetResult(500)<<endl;delete []pCT1,pCT2;return 0;}
0 0
- 大话设计模式——策略模式(C++实现)
- 【大话设计模式】——策略模式
- 大话设计模式——策略模式
- 大话设计模式—策略模式
- 大话设计模式学习(二)——策略模式
- 大话设计模式笔记——策略模式(C++超市收银实现)
- 《大话设计模式》- 策略模式 - C++实现
- 大话设计模式C++实现--策略模式
- 大话设计模式--java实现策略模式
- 大话设计模式——策略模式篇
- 大话设计模式 笔记2——策略模式
- 《大话设计模式》——策略模式1
- 大话设计模式-策略模式
- 大话设计模式-策略模式
- 大话设计模式:策略模式
- 大话设计模式-策略模式
- 大话设计模式-策略模式
- 大话设计模式-策略模式
- cocos2d-x 3.0rc开发指南:Windows下Android环境搭建
- RF software comment check
- 【BestCoder】 HDOJ 5019 Revenge of GCD
- 浅谈AJAX 技术与优缺点
- iOS uiscrollview 自动循环滚动
- 大话设计模式——策略模式(C++实现)
- 【BestCoder】 HDOJ 5020 Revenge of Collinearity
- 祭奠我一千四百多个日子
- springmvc在普通类中获取HttpServletRequest对象
- 读书笔记-HBase in Action-第三部分应用-(2)GIS系统
- Oracle 的内连接、外连接、自连接、左连接、右连接
- Codeforces Round #267 (Div. 2) C. George and Job
- match,search,findall,finditer及group用法
- 单片机程序死机跑飞查错指南