行为模式4-策略模式

2018-04-16  本文已影响0人  sunblog

行为模式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成员变量。

上一篇 下一篇

猜你喜欢

热点阅读