策略模式C++实现
来源:互联网 发布:地图软件下载 编辑:程序博客网 时间:2024/05/22 14:17
类的划分是为了封装,而分类的基础是抽象,所以具有相同属性和功能的对象的抽象集合才是类。
对于简单工厂模式可以解决的问题,当面对算法的时常变动时,可以考虑策略模式;
策略模式封装了算法,适用于“在不同时间应用不同业务规则”的案例;
结合了简单工厂模式的策略模式:
购物费用基类及其三种子类的定义和实现:
strategy.h
#ifndef STRATEGY_H#define STRATEGY_H#include <iostream>#include <string>using namespace std;class CashSuper{public:virtual double acceptMoney(double money){return money;}};//正常收费class CashNormal:public CashSuper{public:double acceptMoney(double money);};//打折子类class CashRebate:public CashSuper{public:CashRebate(double mRebate):moneyRebate(mRebate){}//构造函数初始化列表double acceptMoney(double money);private://打折率double moneyRebate;};//返利子类class CashReturn:public CashSuper{public:CashReturn(double mCondition,double mReturn):moneyCondition(mCondition),moneyReturn(mReturn){}//构造函数初始化列表double acceptMoney(double money);private://两个成员变量double moneyCondition;//返利条件double moneyReturn;//返利数目};#endifstrategy.cpp
#include "strategy.h"double CashNormal::acceptMoney(double money){return money;}//打折子类实现double CashRebate::acceptMoney(double money){return money*moneyRebate;}//返利子类实现double CashReturn::acceptMoney(double money){if(money >= moneyCondition) {int temp=money/moneyCondition;return money-temp*moneyReturn;}return money;}
结合了简单工厂模式的context类,用于维护对一个策略对象的引用:
strFactory.h
#ifndef CASHCONTEXT_H#define CASHCONTEXT_H#include "strategy.h"class CashContext{private://维护一个策略类CashSuper *cs;public://根据客户的选择来实例化该策略工厂//构造函数CashContext(char type);double GetResult(double money);};#endif
strFactory.cpp
#include "strFactory.h"CashContext::CashContext(char type){switch(type){case 'N':cs=new CashNormal();break;case 'B':cs=new CashRebate(0.8);break;case 'R':cs=new CashReturn(300,100);break;}}double CashContext::GetResult(double money){return cs->acceptMoney(money);}
客户端代码:
#include "strFactory.h"int main(){char ch;double money;double output[3];int i=0;while(cin >> ch >> money){CashContext *cs = new CashContext(ch);output[i++]=cs->GetResult(money);delete cs;}for(int j=0;j<i;j++)cout << output[j] << endl;return 0;}
0 0
- 策略模式C语言实现
- 策略模式(c++)
- 策略模式(C语言版)
- 【C++】Chapter2:策略模式
- Objective C--策略模式
- Objective C 策略模式
- Objective C--策略模式
- 策略模式(c++)
- object-c 策略模式
- 策略(Strategy)模式(C#实现版本)
- 利用C语言中的回调函数实现策略模式
- 策略模式的实现
- 策略模式C++实现
- 策略模式的实现
- 策略模式实现
- c++ 实现策略模式
- 策略模式c++实现
- JS实现策略模式
- Group by ALL
- 《Systems Performance: Enterprise and the Cloud》读书笔记系列(五) —— 第二章(四)
- Apache Mina v2.0.8 API手册
- jQuery性能优化
- Python 的join函数
- 策略模式C++实现
- Android5.0网络子系统
- 图像处理中各种边缘检测的微分算子简单比较(Sobel,Robert, Prewitt,Laplacian,Canny)
- unity文档---简单的清单,使你的发布版本尽可能的小
- lua读写文件
- 怎样给超链接设置宽度和高度
- [Android 调试] Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE
- 获取客服端ip
- 形态学运算中腐蚀,膨胀,开运算和闭运算