设计模式之策略模式(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();
}

既然选择了远方,便只顾风雨兼程
原文地址:https://www.cnblogs.com/Forever-Road/p/6595358.html