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();
    }

    既然选择了远方,便只顾风雨兼程
  • 相关阅读:
    redis发布订阅
    redis学习笔记(面试题)
    redis安全 (error) NOAUTH Authentication required
    HDU3001 Travelling —— 状压DP(三进制)
    POJ3616 Milking Time —— DP
    POJ3186 Treats for the Cows —— DP
    HDU1074 Doing Homework —— 状压DP
    POJ1661 Help Jimmy —— DP
    HDU1260 Tickets —— DP
    HDU1176 免费馅饼 —— DP
  • 原文地址:https://www.cnblogs.com/Forever-Road/p/6595358.html
Copyright © 2011-2022 走看看