大话设计模式C++实现二:策略模式

//个人觉得策略模式与工厂模式很像
#include <string> #include <math.h> #include <iostream> #include <stdlib.h> class CashSuper { public: virtual double acceptCash(double money) = 0; }; class CashNormal :public CashSuper { public: double acceptCash(double money) { return money; } }; class CashReturn :public CashSuper { private: double moneyCondition; double moneyReturn; public: CashReturn(double moneyCondition, double moneyReturn) { this->moneyCondition = moneyCondition; this->moneyReturn = moneyReturn; } double acceptCash(double money) { double result = money; if (moneyCondition) result = money - floor(money / moneyCondition)*moneyReturn; return result; } }; class CashRebate :public CashSuper { private: double moneyRebate; public: CashRebate(double moneyRebate) { this->moneyRebate = moneyRebate; } double acceptCash(double money) { return money*moneyRebate; } }; class CashContext { private: CashSuper* cs; public: CashContext(int type) :cs(NULL) { switch (type) { case 1: { cs = new CashNormal(); break; } case 2: { cs = new CashReturn(300, 100); break; } case 3: cs = new CashRebate(0.8); break; default:; } } ~CashContext() { if (cs != NULL) { delete cs; cs = NULL; } } double GetResult(double money) { return cs->acceptCash(money); } }; int main() { double total = 0; double totalPrice = 0; CashContext* cc1 = NULL; cc1 = new CashContext(1); totalPrice = cc1->GetResult(300); total += totalPrice; std::cout << "Type:正常收费 totalPrices:" << totalPrice << " total:" << total << std::endl; totalPrice = 0; CashContext* cc2 = NULL; cc2 = new CashContext(2); totalPrice = cc1->GetResult(700); total += totalPrice; std::cout << "Type:满300返100 totalPrices:" << totalPrice << " total:" << total << std::endl; totalPrice = 0; CashContext* cc3 = NULL; cc2 = new CashContext(3); totalPrice = cc1->GetResult(300); total += totalPrice; std::cout << "Type:打八折 totalPrices:" << totalPrice << " total:" << total << std::endl; totalPrice = 0; if (cc1 != NULL) { delete cc1; cc1 = NULL; } if (cc2 != NULL) { delete cc2; cc2 = NULL; } if (cc3 != NULL) { delete cc3; cc3 = NULL; } return 0; }

  

转载于:https://www.cnblogs.com/miracle2015126/p/6122971.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值