设计模式-策略模式
2017-04-17 20:34
337 查看
策略模式(Strategy):它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。
比如:超市会进行普通收费,打折,满减等活动,并且这些算法会经常变化。
UML:
与工厂模式不同之处在于:工厂与每个子类关联,并生成子类的实例。客户端需要知道这些具体的子类和工厂类。
而策略模式直接与抽象类关联,客户端通过固定的接口获得结果,只需要知道管理类即可。
比如:超市会进行普通收费,打折,满减等活动,并且这些算法会经常变化。
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; }
相关文章推荐
- 设计模式之Strategy(策略)
- 设计模式之策略模式(strategy)--游戏角色使用武器
- [设计模式] 23.Strategy 策略模式
- [★] .NET 偶尔连接的设计策略 -联机状态- 脱机模式- 数据同步
- 设计模式袖珍版 连续转载之 - Strategy(策略)
- 乐在其中设计模式(C#) - 策略模式(Strategy Pattern)
- 设计模式随笔系列:鸭子-策略模式(Strategy)[原]
- 设计模式之Strategy(策略)
- 设计模式之策略模式探讨初步[引]
- 设计模式随笔系列:鸭子-策略模式(Strategy)[转]
- 设计模式之Strategy(策略)
- Java设计模式学习之一---策略模式
- AspectJ实现设计模式(二)——策略模式
- 设计模式之策略模式探讨初步
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)
- 设计模式与泡mm的关系之strategy策略模式及再思考
- 设计模式之Strategy(策略)
- 设计模式随笔系列:鸭子-策略模式(Strategy)
- 设计模式(20)-策略模式(Strategy)