设计模式-策略模式
来源:互联网 发布:数据挖掘及应用是什么 编辑:程序博客网 时间:2024/05/29 11:24
策略模式(Strategy):它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。
比如:超市会进行普通收费,打折,满减等活动,并且这些算法会经常变化。
UML:
与工厂模式不同之处在于:工厂与每个子类关联,并生成子类的实例。客户端需要知道这些具体的子类和工厂类。
而策略模式直接与抽象类关联,客户端通过固定的接口获得结果,只需要知道管理类即可。
//收费抽象类class CashSuper {public: virtual double acceptCash(double money) = 0;};//普通收费类class CashNomal :public CashSuper {public: double acceptCash(double money) { return money; }};//打折收费类class CashReBate :public CashSuper {private: double m_rebate;public: CashReBate(double Rebate) :m_rebate(Rebate) {} double acceptCash(double money) { return money*m_rebate; }};//满减收费类class CashReturn :public CashSuper {private: double m_money; double m_return;public: CashReturn(double Money, double Return) :m_money(Money), m_return(Return) {} double acceptCash(double money) { double res = money; if (money >= m_money) res = money - (money/m_money)*m_return; return res; }};enum TYPE { Nomal, Rebate, Return };//收费管理类(一般使用简单工厂方法,将switch从客户端转移过来)class CashContext {private: CashSuper *cs;public: CashContext(TYPE type) { switch (type) { case Nomal: cs = new CashNomal(); break; case Rebate: cs = new CashReBate(0.8); break; case Return: cs = new CashReturn(300, 100); break; } } double GetResult(double money) { return cs->acceptCash(money); }};int main(){ CashContext *super1 = new CashContext(Nomal); cout << super1->GetResult(100) << endl; CashContext *super2 = new CashContext(Rebate); cout << super2->GetResult(100) << endl; CashContext *super3 = new CashContext(Return); cout << super3->GetResult(300) << endl; system("pause"); return 0;}
0 0
- 设计模式-策略模式
- 设计模式:策略模式
- 设计模式-策略模式
- 设计模式 - 策略模式
- 设计模式-策略模式
- 设计模式-----策略模式
- 设计模式 策略模式
- 设计模式-策略模式
- 设计模式-【策略模式】
- 设计模式-----策略模式
- 设计模式-策略模式
- 设计模式--策略模式
- 设计模式- 策略模式
- 设计模式- 策略模式
- 设计模式------策略模式
- 设计模式--策略模式
- 设计模式-策略模式
- 设计模式--策略模式
- 剑指offer 扑克牌顺子
- Web 图片Base64编码
- Exynos4412 uboot2013.1移植B
- Android studio导入Github上的library开源库
- 计算机专用英语词汇1500词
- 设计模式-策略模式
- 最大子矩阵
- SDU 1247 LCA
- 枚举
- 1015. 德才论 (25)
- 概率DP
- bzoj 3887 tarjan+拓扑排序
- Android自定义仪表盘
- ios--Quartzcore核心动画框架的学习