策略模式c++版本
来源:互联网 发布:魔力宝贝宠物达标数据 编辑:程序博客网 时间:2024/06/10 06:10
这是大话设计模式中的策略模式的c++版本
//策略模式#include <iostream>using namespace std;enum Cash_type{ NORMALL_CASH = 0, RETURN_CASH = 1, DISCOUNT = 2,};//虚基类cashsuperclass CashSuper{public: //打折函数 double virtual acceptCash(double money)=0; //虚析构函数 virtual ~CashSuper(){};};//正常收费子类class CashNormal :public CashSuper{public: double acceptCash(double money) override { //正常返回 return money; }};//打折收费类class CashRebate:public CashSuper{public: //打折收费 CashRebate(double moneyRebate) { _moneyReabate = moneyRebate; } double acceptCash(double money) override { return money * _moneyReabate; }private: double _moneyReabate = 0;};//返利收费,超过设定金额,全部的数值就加入返利计算class CashReturn:public CashSuper{public: CashReturn(double moneyCondition,double moneyReturn) { _moneyCondition = moneyCondition; _moneyReturn = moneyReturn; } double acceptCash(double money) override { double result = money; if(money >= _moneyCondition) { result = money - (money/_moneyCondition) * _moneyReturn; } return result; }private://返利条件double _moneyCondition = 0; //返利数值double _moneyReturn = 0;};//定义所有支持的算法的公共接口class CashContext{public: double GetResult(double money) { return _cs->acceptCash(money); } //将工厂的对象实例化过程转移至此实现与工厂方法的结合 CashContext(Cash_type type) { switch(type) { case NORMALL_CASH: _cs = new CashNormal(); break; case RETURN_CASH: _cs = new CashReturn(300,100); break; case DISCOUNT: _cs = new CashRebate(0.8); break; } }private: CashSuper *_cs;};int main(){ double cash = 500; //获取收费策略 CashContext *csuper = new CashContext(RETURN_CASH); //将传入金额 cout<<"在现有优惠策略下消费"<<cash<<",实际支付的金额是:"<<csuper->GetResult(cash)<<endl; return 0;}
测试输出:
在现有优惠策略下消费500,实际支付的金额是:333.333
策略模式优点:
1.减少了算法类与使用算法类的耦合
2.有助于提取出算法中的公共功能
3.简化单元测试
缺点:
改变的成本比较大
转载请注明源地址:http://blog.csdn.net/clh01s
阅读全文
0 0
- 策略模式之C++版本
- 策略模式c++版本
- 策略(Strategy)模式(C#实现版本)
- JavaScript版本的策略模式
- 策略模式(c++)
- 策略模式(C语言版)
- 【C++】Chapter2:策略模式
- Objective C--策略模式
- Objective C 策略模式
- Objective C--策略模式
- 策略模式(c++)
- object-c 策略模式
- 策略模式C语言实现
- c版本观察者模式
- 设计模式C++(Strategy策略模式)
- 设计模式C++(Strategy策略模式)
- C语言设计模式:策略模式
- C语言设计模式之策略模式
- 建表、增、删、改
- Android Butternife 的使用
- Google Chrome调试js入门
- 利用python对中文文本数据进行LDA训练、计算概率距离
- Android开发模式之MVC模式
- 策略模式c++版本
- csjon 下载地址
- 11_数值的整数次方
- 如何解决谷歌地球不显示卫星影像的问题
- Hough(霍夫)变换原理
- 【Hadoop--01】Hadoop简介
- HDU 1009 FatMouse' Trade 详解
- windows下提升编码效率的一些利器
- scikit-learn 1.3. Kernel ridge regression