设计模式之- 策略模式(Strategy Pattern)

Posted j1ac

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之- 策略模式(Strategy Pattern)相关的知识,希望对你有一定的参考价值。

策略模式

在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。
在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。
 
C++实现代码:
#include<iostream>

using namespace std;


class Strategy {
public:
    virtual int doOperation(int num1, int num2) = 0;
};


class OperationAdd :public Strategy{
public:
    int doOperation(int num1, int num2) {
       return num1 + num2;
    }
};




class OperationSubstract  :public Strategy{
public:
    int doOperation (int num1, int num2) {
       return num1 - num2;
    }
};



class OperationMultiply   :public Strategy{
public:
    int doOperation(int num1, int num2) {
       return num1 * num2;
    }
};



class Context {
    Strategy* strategy;
public:
    Context(Strategy* strategy){
        this->strategy = strategy;
    }

    void setStrategy(Strategy* st){
        if(this->strategy != nullptr)  delete this->strategy;//注意析构
        this->strategy = st;
    }

    int executeStrategy(int num1, int num2){
        return strategy->doOperation(num1, num2);
    }
};


class StrategyPatternDemo {
public:
    static void method() {
        Context* context = new Context(new OperationAdd());    
        cout<<"10 + 5 = " << context->executeStrategy(10, 5)<<endl;

        context->setStrategy(new OperationSubstract());      
        cout<<"10 - 5 = " << context->executeStrategy(10, 5)<<endl;

        context->setStrategy(new OperationMultiply());    
        cout<<"10 * 5 = " << context->executeStrategy(10, 5)<<endl;
    }
};


int main(int argc,char** argv){
    StrategyPatternDemo::method();
}

类图:

技术分享图片

策略模式通过更换上下文中的strategy变换上下文的行为,仔细想想和template pattern非常相像,只不过template pattern是通过继承实现局部功能变化,而strategy pattern则是通过对于strategy的组合。

以上是关于设计模式之- 策略模式(Strategy Pattern)的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之策略模式(Strategy)详解及代码示例

设计模式之- 策略模式(Strategy Pattern)

JAVA设计模式之策略模式 - Strategy

23种设计模式之策略模式(Strategy)

Java设计模式之策略模式(Strategy)

23种设计模式之策略模式——Strategy