zoukankan      html  css  js  c++  java
  • 设计模式之策略模式(Strategy Pattern)

      定义:定义一组算法,将每个算法封装起来,并且使他们之间可以互换。

      策略模式使用的就是面向对象的继承和多态机制。

      优点:1、算法可以自由切换

         2、避免使用多重条件判断

           3、扩展性良好

      缺点:1、策略类数量增多

           2、所有策略类都需要向外暴露

    using namespace std;
    
    //策略抽象类
    class CalculateStrategy
    {
    public:
        CalculateStrategy() {}
        ~CalculateStrategy() {}
    
        virtual void Cal() = 0;
    };
    
    
    //加法策略
    class AddStrategy : public CalculateStrategy
    {
    public:
        AddStrategy(int a, int b)
        {
            this->a = a;
            this->b = b;
        }
    
        ~AddStrategy() {}
    
        void Cal()
        {
            printf("%d + %d = %d
    ", a, b, a + b) ;
        }
    
    private:
        int a;
        int b;
    };
    
    
    //减法策略
    class SubStrategy : public CalculateStrategy
    {
    public:
        SubStrategy(int a, int b) 
        {
            this->a = a;
            this->b = b;
        }
    
        ~SubStrategy() {}
    
        void Cal()
        {
            printf("%d - %d = %d
    ", a, b, a - b);
        }
    
    private:
        int a;
        int b;
    };
    ///////////////////////////////////
    //可以添加n个策略。。。。
    /////////////////////////////////
    
    
    
    //所有策略进行封装
    class Context
    {
    public:
        Context(CalculateStrategy *cal)
        {
            this->cal = cal;
        }
        ~Context() {}
    
        void Cal() 
        {
            cal->Cal();
        }
    private:
        CalculateStrategy *cal;
    
    };
    
    
    int main() 
    {
        AddStrategy add(3, 5);
        SubStrategy sub(9, 6);
    
        Context *context;
    
        context = new Context(&add);
        context->Cal();
    
        context = new Context(&sub);
        context->Cal();
    }

    既然选择了远方,便只顾风雨兼程
  • 相关阅读:
    逻辑回归与最大熵模型
    提升方法-AdaBoost
    Python中的类属性、实例属性与类方法、静态方法
    mysqldump详解
    12.python 模块使用,面向对象介绍
    11 python 内置函数
    10.函数的变量与返回值
    9. 函数的定义和参数,默认参数
    linux下iptables详解
    把linux下的yum源更换为阿里云的国内源
  • 原文地址:https://www.cnblogs.com/Forever-Road/p/6595358.html
Copyright © 2011-2022 走看看