美文网首页
行为模式4-策略模式

行为模式4-策略模式

作者: sunblog | 来源:发表于2018-04-16 23:21 被阅读0次

    行为模式4-策略模式

    策略模式Strategy

    意图

    定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式是的算法可独立于使用它的客户而变化。

    问题思考

    考虑跨平台文本编辑器。windows下换行是\r\n,unix是\n。这只是格式化算法的一部分。如果直接把格式化硬编码到程序中(if else),将使程序变得更加复杂。比如,我们想增加\r这种换行的时候。

    适用性

    • 许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。
    • 需要使用一个算法的不同变体。例如:权衡时间/空间的算法,一个侧重时间,一个侧重空间。
    • 一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现。

    类图

    strategy

    实现

    class Strategy {
    public:
        virtual void AlgorithmInterface() = 0;
    };
    
    class Context {
    public:
        explicit Context(Strategy *strategy) { mStrategy = strategy; }
    
        void ContextInterface() {
            mStrategy->AlgorithmInterface();
        }
    
    private:
        Strategy *mStrategy = nullptr;
    };
    
    class ConcreteStrategy1 : public Strategy {
    public:
        void AlgorithmInterface() override {
            std::cout << "format 1" << std::endl;
            // some other thing
        }
    
    };
    
    class ConcreteStrategy2 : public Strategy {
    public:
        void AlgorithmInterface() override {
            std::cout << "format 2" << std::endl;
            // some other thing
        }
    
    };
    
    

    注意:接口应该根据需求而改变。比如需不需要知道Context的信息。如果需要知道context的信息,ConcreteStrategy就需要一个Context成员变量。

    相关文章

      网友评论

          本文标题:行为模式4-策略模式

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