策略模式
来源:互联网 发布:looper软件下载 编辑:程序博客网 时间:2024/05/16 05:27
策略模式:它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法变化,不会影响到使用算法的客户策略模式就是用来封装算法的,但在实践中,我们发现可以用它来,封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。
#include <iostream> #include <string> using namespace std; // 抽象类 class CashSuper { public: virtual double AcceptCash(double money) = 0; }; // 普通收费类 class CashNormal : public CashSuper { public: double AcceptCash(double money) { return money; } }; // 打折收费类 class CashDiscount : public CashSuper { public: CashDiscount(double dis):discount(dis){} double AcceptCash(double money) { return money * discount; } double discount; }; // 返还收费类 class CashBack : public CashSuper { public: CashBack(double condition, double returnmoney):MoneyCondition(condition), moneyReturn(returnmoney){} double AcceptCash(double money) { double returnm; if (money > MoneyCondition) { returnm = money - moneyReturn; } return returnm; } double MoneyCondition; double moneyReturn; }; // 策略类 class Strategy { public: Strategy(string str) { if (str == "普通") { cash = new CashNormal(); } else if (str == "打8折") { cash = new CashDiscount(0.8); } else if(str == "返还") { cash = new CashBack(300, 100); } } double GetResult(double mon) { return cash->AcceptCash(mon); } CashSuper *cash; }; void main() { double total; Strategy *str = NULL; str = new Strategy("返还"); total = str->GetResult(500); cout << total << endl; delete str;}
该程序时模拟商场收银的一个简单功能,有普通收费,打折收费,返还收费定义了一个抽象类和三个派生类,并且通过策略类封装了算法的实现,用户看不到真正的算法代码,使耦合度大大降低。
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 爱恨情仇,恩怨难绝
- Android中shape的使用
- Mysql ERROR 1017 (HY000): Can't find file: './db/table.frm' (errno: 13)
- linux自启动服务设置
- 测试Jboss AS7的Ibm MQ队列服务
- 策略模式
- python中List的sort方法(或者sorted内建函数)的用法
- 多科成绩单(必看啊)
- 修改属性值
- 使用eclipse调试cocos2d-x C++ 代码(编写+真机调试,放弃VS) (转)
- node js 连接mysql 增删改查
- android中关于焦点以及点击layout以外的地方关闭layout
- UIAttachmentBehavior-动画效果:依附,关联
- Js作用域与作用域链详解