美文网首页
结构型模式4-装饰模式

结构型模式4-装饰模式

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

    结构型模式4-装饰模式

    装饰模式Decorator

    意图

    动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式想比生成子类更为灵活。

    问题思考

    比如,我们想给image上盖一层半透明的背景,再在中央添加几个文字。我们可以这样子类化image,TransparentImage, TextTransparentImage。但如果我们又需要另外一种组合呢:image中央添加几个文字,再盖上一层半透明背景。我们可以也可以之内化,TextImage,TransparentTextImage。这造成了大量的重复。因为就功能来说,这两种功能完全一致,只是顺序不同。

    适用性

    • 在不影响其他对象的情况下, 以动态、透明的方式给单个对象添加职责。
    • 处理那些可以撤销的职责
    • 当生成子类不合适的时候。比如:为支持所有的可能,子类的数目可能暴增。

    注意事项

    • 我们可以递归地为对象添加多个Decorator

    类图

    decorator

    实现

    
    class Component {
    public:
        virtual void Operation() = 0;
    };
    
    
    class Decorator : public Component {
    public:
        explicit Decorator(Component *c) { mComponent = c; }
    
        void Operation() override {
            mComponent->Operation();
        }
    
    private:
        Component *mComponent = nullptr;
    };
    
    
    class ConcreteComponent : public Component {
    public:
        void Operation() override {
            // some code
        }
    };
    
    class ConcreteDecoratorA : public Decorator {
    public:
        explicit ConcreteDecoratorA(Component *c) : Decorator(c) {}
    
        void AddedBehavior() {
            // some code
        }
    
        void Operation() override {
            AddedBehavior();
            Decorator::Operation();
        }
    
    };
    
    

    相关文章

      网友评论

          本文标题:结构型模式4-装饰模式

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