设计模式2-策略模式
2014-09-28 19:10
162 查看
一、我的描述
软件开发中把某些具有共同特征的问题抽象出来,然后封装成类,在实际的环境中,根据需要选择不同的实现方式。如,超市收费系统,有的时候要做活动需打折,他们都有收费的共同特征,但是实现方式不一样。这样做既减少算法之间的耦合,同时也使系统容易可扩展。
我感觉策略模式和简单工厂模式有很多的相似地方,只是侧重点不同。工厂模式主要是进行对象的生成,调用者还能知道生产出来的对象,而策略模式更多是用户只需选择一种策略,不需要知道产生的对象,代码耦合性更好。
二、UML图
三、代码
软件开发中把某些具有共同特征的问题抽象出来,然后封装成类,在实际的环境中,根据需要选择不同的实现方式。如,超市收费系统,有的时候要做活动需打折,他们都有收费的共同特征,但是实现方式不一样。这样做既减少算法之间的耦合,同时也使系统容易可扩展。
我感觉策略模式和简单工厂模式有很多的相似地方,只是侧重点不同。工厂模式主要是进行对象的生成,调用者还能知道生产出来的对象,而策略模式更多是用户只需选择一种策略,不需要知道产生的对象,代码耦合性更好。
二、UML图
三、代码
#include <iostream> using namespace std; class Casher { public: Casher(float m) : money(m) {} virtual ~Casher() {} virtual float GetResult() { return 0.0f; } virtual float GetMoney() { return money; } private: float money; }; class NormalCasher : public Casher { public: NormalCasher(float m) : Casher(m) {} virtual float GetResult() { return GetMoney(); } }; class RateCasher : public Casher { public: RateCasher(float m, float r) : Casher(m) , rate(r) {} virtual float GetResult() { return GetMoney() * rate; } private: float rate; }; enum Stage { _normal=0, _rate }; class StageContent { public: ~StageContent() { delete casher; } void SetStageContent(float money, Stage s) { switch(s) { case _normal: casher = new NormalCasher(money); break; case _rate: casher = new RateCasher(money, 0.8); break; } } float GetResult() { return casher->GetResult(); } private: Casher *casher; }; int main() { StageContent stage; stage.SetStageContent(100, _rate); cout << stage.GetResult() << endl; 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)