美文网首页设计模式C++实现笔记
STRATEGY 策略模式(行为模式)

STRATEGY 策略模式(行为模式)

作者: lixin_karl | 来源:发表于2019-03-07 17:05 被阅读0次

    介绍

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

    参与者

    Strategy 策略基类
    ConcreteStrategy 具体策略
    Context 具体使用策略的对象

    实现代码

    #include <iostream>
    
    class Strategy{//Strategy 策略基类
    public:
        virtual void DoStrategy() = 0;
    };
    
    class StrategyA:public Strategy{//ConcreteStrategy 具体策略
    public:
        void DoStrategy() override
        {
            std::cout<<"使用策略 A"<<std::endl;
        }
    };
    
    class StrategyB:public Strategy{//ConcreteStrategy 具体策略
    public:
        void DoStrategy() override
        {
            std::cout<<"使用策略 B"<<std::endl;
        }
    };
    
    class Context {//Context 具体使用策略的对象
    public:
        explicit Context(Strategy *state1)
        {
            state = state1;
        }
        void Work()
        {
            state->DoStrategy();
        }
    private:
        Strategy *state;
    };
    
    int main()
    {
        auto context1 = new Context(new StrategyA());
        context1->Work();
        auto context2 = new Context(new StrategyB());
        context2->Work();
    }
    

    输出结果

    使用策略 A
    使用策略 B
    

    感觉跟状态模式差不多

    特点

    • 算法可以自由切换
    • 避免使用多重条件判断
    • 扩展性良好
    • 策略类会增多
    • 所有策略类都需要对外暴露。

    参考

    • 《设计模式:可复用面向对象软件的基础》

    相关文章

      网友评论

        本文标题:STRATEGY 策略模式(行为模式)

        本文链接:https://www.haomeiwen.com/subject/gdgiuqtx.html