结构型模式4-装饰模式

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

结构型模式4-装饰模式

装饰模式Decorator

意图

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

问题思考

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

适用性

注意事项

类图

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();
    }

};

上一篇下一篇

猜你喜欢

热点阅读