首页 > 代码库 > 设计模式2-策略模式

设计模式2-策略模式

一、我的描述

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

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

二、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;}

 

设计模式2-策略模式