原网址:https://blog.csdn.net/dwb1015/article/details/18139881
代码做如下修改:

#include <iostream>
using namespace std;
/*付款金额计算的抽象类*/
class CashSuper {public:/*计算应付金额*/virtual double AcceptCash(double money) = 0;
};/*正常收费策略*/
class CashNormal : public CashSuper {public:virtual double AcceptCash(double money){return money;}
};
/*打折收费策略*/
class CashRebate : public CashSuper {private:double discount;public:CashRebate( double dis ) : discount(dis) {}virtual double AcceptCash(double money) {return money * discount;}
};
/*返现收费策略*/
class CashReturn : public CashSuper {private:double moneyCondition_;double moneyReturn_;public:CashReturn( double condition, double retu ) : moneyCondition_(condition), moneyReturn_(retu) {}virtual double AcceptCash(double money) {double result = money;if( money > moneyCondition_ ){result = money - ( static_cast<int>( money / moneyCondition_ ) ) * moneyReturn_;}return result;}
};
/* 收费策略 */
class CashContext {private:CashSuper* cs_; /* 声明付款金额的收费策略 */public:/*初始化时,传入具体的策略对象(正常、打折、返现)*/CashContext(int type){switch(type) {case 1:cs_ = new CashNormal();break;case 2:cs_ = new CashRebate(0.8);break;case 3:cs_ = new CashReturn(300, 100);break;default:throw exception("没有这种促销活动");}}~CashContext() {delete cs_;}/*得到现金计算结果(利用了多态机制,不同的策略行为导致不同的结果)*/double GetResult( double money ) {return cs_->AcceptCash(money);}
};
int main() {double price = 50;double number = 7;/* 活动类型 */CashContext cashcontext1(1);cout<<cashcontext1.GetResult( price * number )<<endl;CashContext cashcontext2(2);cout<<cashcontext2.GetResult( price * number )<<endl;CashContext cashcontext3(3);cout<<cashcontext3.GetResult( price * number )<<endl;return 0;
}

运输结果:
350
280
250

C++设计模式——策略模式(高屋建瓴)相关推荐

  1. Python设计模式-策略模式

    Python设计模式-策略模式 代码基于3.5.2,代码如下; #coding:utf-8 #策略模式class sendInterface():def send(self,value):raise ...

  2. 关于设计模式——策略模式-Strategy Pattern

    文章目录 1 策略模式 1.1 模拟鸭子 1.2 设计原则 1.3 整合行为 1.4 模拟鸭子代码的代码 1.5 动态设定行为 1.6 重新查看整体 1.7 继承和组合 1.8 总结 1.9 优劣期间 ...

  3. [设计模式] ------ 策略模式

    策略模式 它定义了算法家族,分别封装起来,让他们直接可以互相替换,此模式让算法的变化,不会影响到使用算法的客户 其实很简单,可能很多人都用到了,只不过还不知道这就是策略模式而已. 比如定义一个接口A, ...

  4. java 策略模式 促销_java设计模式——策略模式

    一. 定义与类型 定义:针对一组算法,将每一种算法都封装到具有共同接口的独立的类中,从而是它们可以相互替换.策略模式的最大特点是使得算法可以在不影响客户端的情况下发生变化,从而改变不同的功能.当代码中 ...

  5. Springboot 使用设计模式- 策略模式

    前言 直白点,什么场景我们需要使用到设计模式- 策略模式. 在平常的springboot项目里面做CRUD,我们的习惯性基本是 一个mapper,一个service,一个serviceImpl. 但是 ...

  6. 李建忠设计模式——策略模式Strategy

    目录 1.策略模式定义 1.动机 2.模式定义 3.结构 2.实现例子 1.问题描述 2.代码实现 3.要点总结 4.参考 1.策略模式定义 1.动机 软件构建过程中,某些对象使用的算法可能多种多样, ...

  7. 15. 星际争霸之php设计模式--策略模式

    题记 ============================================================================== 本php设计模式专辑来源于博客(jy ...

  8. Java设计模式-策略模式作业

    Java设计模式-策略模式作业,所有类和接口均在一个package内 文章目录 前言 一.作业内容 二.具体实现 1.类图 2.Strategy接口 3.PreCopyStrategy类 4.Post ...

  9. 设计模式-策略模式2.0

    设计模式-策略模式2.0 前面文章我们说过了传统的策略模式的实现,本文我们简单说下设计模式中的升级版的策略模式,策略模式2.0. 代码实现 talk is cheap show me the code ...

  10. 设计模式-策略模式(Strategy)-Java

    设计模式-策略模式(Strategy)-Java 目录 文章目录 1.前言 2.示例案例-电影票打折方案 3.策略模式概述 3.1.策略模式定义 3.2.策略模式结构 3.3.策略模式结构图中角色 3 ...

最新文章

  1. 站长们 技术不是你生存的全部
  2. win10如何修改文件拓展名?
  3. mysql 集群备份脚本_MysqlBackup
  4. C++ 中assert()函数用法总结
  5. 嵌入式linux的运行过程,ARM嵌入式设备Linux系统启动步骤和方式
  6. 如何在JMeter中执行客户端Web性能测试?
  7. 数据库DBA(3年以内需求)
  8. vs生成命令和属性的宏
  9. hibernate 联合主键
  10. 数据结构(一)之线性表
  11. 菜鸟学 VB 用API在PictureBox中I划线|平移|放大|缩小 详解and分享
  12. 【MySQL】java应用开发与实践读书笔记
  13. python训练模型一直循环怎么办_用pycharm编写程序进行模型训练时总是有memory error错误,如何解决?...
  14. sql查询时添加一列为固定值
  15. 知乎带货月入过万的赚钱路子,前期操作后期可躺赚
  16. 利用Photoshop通道制作BMP格式的透明图标
  17. 人工智能领域的十大算法
  18. 程序设计与算法(三)期末考试之013:编程填空:三生三世
  19. 今天的“指导”感触:融会贯通;雄关漫道真如铁,而今漫步从头越!
  20. 基于php的乐山旅游攻略网站

热门文章

  1. 线性代数的几何意义(一)——线性代数的意义
  2. dynamic_cast用法总结
  3. Spring-DI详解
  4. WOL远程开机,实际落地成功。
  5. centos :不在 sudoers 文件中。此事将被报告
  6. Arduino提高篇23—OLED电子时钟
  7. AWS S3 - 从S3下载数据
  8. 杭电OJ——第1000,1001题
  9. MacOS上使用ffmpeg利用显卡加速批量压缩视频
  10. CCPC 2050 万人编程竞赛热身赛:1001 赶火车