zoukankan      html  css  js  c++  java
  • 设计模式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;
    }
  • 相关阅读:
    5G终端测试 FOTA功能
    利尔达 UIS8910DM 模组的 发送短信TEXT格式
    利尔达 UIS8910DM 模组的 发送短信PDU格式
    altera原厂 cyclone V开发板使用记录
    【3】TensorFlow光速入门-训练及评估
    【2】TensorFlow光速入门-数据预处理(得到数据集)
    【1】TensorFlow光速入门-tensorflow开发基本流程
    【0】TensorFlow光速入门-序
    DbHelperSQL
    Git——简单的分支规范
  • 原文地址:https://www.cnblogs.com/457220157-FTD/p/3998844.html
Copyright © 2011-2022 走看看