首页 / 设计模式 / 设计模式(2)---策略模式
设计模式(2)---策略模式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了设计模式(2)---策略模式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2969字,纯文字阅读大概需要5分钟。
内容图文
![设计模式(2)---策略模式](/upload/InfoBanner/zyjiaocheng/1072/4531e9cdb80847129c1d32b43b08eee9.jpg)
1 #include <memory> 2 #include <string> 3 #include <iostream> 4 5usingnamespace std; 6 7class Cash 8{ 9public: 10virtualdouble acceptCash(double cash) = 0; 11}; 12 13class NormalCash : public Cash 14{ 15public: 16double acceptCash(double cash) 17 { 18 cout << "normal cash:" << cash << endl; 19return cash; 20 } 21}; 22 23class RebateCash : public Cash 24{ 25public: 26 RebateCash(double rebate = 1.0) : rebate_(rebate) 27 {} 28double acceptCash(double cash) 29 { 30 cout << "rebate cash:" << cash << endl; 31return cash*rebate_; 32 } 33private: 34double rebate_; 35}; 36class ReturnCash : public Cash 37{ 38public: 39 ReturnCash(double moneyCondition, double moneyReturn) :moneyCondition_(moneyCondition),moneyReturn_(moneyReturn) 40 {} 41double acceptCash(double cash) 42 { 43 cout << "return cash:" << cash << endl; 44int returnNum = static_cast<int>(cash / moneyCondition_); 45return cash - returnNum * moneyReturn_; 46 } 47private: 48double moneyCondition_; 49double moneyReturn_; 50}; 51enum CASH_TYPE 52{ 53 NORMAL_CASH, 54 REBATE_CASH, 55 RETURN_CASH, 56 57 CASH_BUTTON 58}; 59 60 shared_ptr<Cash> cashFactory(CASH_TYPE cashType = NORMAL_CASH, double parameterA = 0, double parameterB = 0) 61{ 62switch (cashType) 63 { 64case NORMAL_CASH: 65return make_shared<NormalCash>(); 66case REBATE_CASH: 67return make_shared<RebateCash>(parameterA); 68case RETURN_CASH: 69return make_shared<ReturnCash>(parameterA, parameterB); 70default: 71 cout << "Can not distinguish the cash_type" << endl; 72return nullptr; 73 } 74} 75 76class CashContext 77{ 78public: 79 CashContext(shared_ptr<Cash> cashProcesser) :cashNum_(0), discountCashSum_(0), originalCashSum_(0), 80 cashProcesser_(cashProcesser) 81 { 82 } 83double acceptCash(double cash) 84 { 85double price; 86 87 price = cashProcesser_->acceptCash(cash); 88 89 discountCashSum_ += price; 90 originalCashSum_ += cash; 91 cashNum_ += 1; 92 93return price; 94 } 95 shared_ptr<Cash> setCashProcesser(shared_ptr<Cash> newProcesser) 96 { 97 auto oldProcesser = cashProcesser_; 98 cashProcesser_ = newProcesser; 99return oldProcesser; 100 } 101private: 102int cashNum_; 103double discountCashSum_; 104double originalCashSum_; 105 shared_ptr<Cash> cashProcesser_; 106}; 107108109int main() 110{ 111 shared_ptr<Cash> normalCashProcesser = cashFactory(NORMAL_CASH); 112 shared_ptr<Cash> rebateCashProcesser = cashFactory(REBATE_CASH, 0.8); 113 shared_ptr<Cash> returnCashProcesser = cashFactory(RETURN_CASH, 300 ,50); 114115 CashContext cashContext(normalCashProcesser); 116 cashContext.acceptCash(30); 117118 cashContext.setCashProcesser(rebateCashProcesser); 119 cashContext.acceptCash(30); 120121 cashContext.setCashProcesser(returnCashProcesser); 122 cashContext.acceptCash(30); 123124return0; 125 }
原文:http://www.cnblogs.com/cauchy007/p/5205820.html
内容总结
以上是互联网集市为您收集整理的设计模式(2)---策略模式全部内容,希望文章能够帮你解决设计模式(2)---策略模式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。
来源:【匿名】