您的位置:首页 > 其它

设计模式2-策略模式

2014-09-28 19:10 162 查看
一、我的描述

  软件开发中把某些具有共同特征的问题抽象出来,然后封装成类,在实际的环境中,根据需要选择不同的实现方式。如,超市收费系统,有的时候要做活动需打折,他们都有收费的共同特征,但是实现方式不一样。这样做既减少算法之间的耦合,同时也使系统容易可扩展。

  我感觉策略模式和简单工厂模式有很多的相似地方,只是侧重点不同。工厂模式主要是进行对象的生成,调用者还能知道生产出来的对象,而策略模式更多是用户只需选择一种策略,不需要知道产生的对象,代码耦合性更好。

二、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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: