一、功能
动态地给一个对象添加一些额外的功能。
二、优缺点
优点:Decorator的目的是"动态的给一个对象添加一些额外的功能"。其关键之处在于"动态"和"对象"上。传统上依靠子类继承来实现功能的扩展,它针对的是整个类。但Decorator不使用继承,所以它只是针对单个对象实例进行功能的扩展。并且,从下面的示例代码中也可以看出,可以在运行时动态地、灵活地对功能进行组装。
三、示例代码
namespace DesignPattern_Decorator { // class Component class Component { public: virtual ~Component() {} virtual void operation() = 0 ; } ; // class ConcreteComponent class ConcreteComponent : public Component { public: virtual ~ConcreteComponent() {} virtual void operation() { // some operations } } ; // class Decorator class Decorator : public Component { public: Decorator(Component *pComponent) : _component(pComponent) { assert(_component) ; } virtual ~Decorator() { delete _component ; } virtual void operation() { _component->operation() ; } private: Component *_component ; } ; // class ConcreteDecoratorA class ConcreteDecoratorA : public Decorator { public: ConcreteDecoratorA(Component *pComponent) : Decorator(pComponent) {} virtual void operation() { // some operations Decorator::operation() ; // some operations } } ; // class ConcreteDecoratorB class ConcreteDecoratorB : public Decorator { public: ConcreteDecoratorB(Component *pComponent) : Decorator(pComponent) {} virtual void operation() { // some operations Decorator::operation() ; // some operations } } ; } 客户端代码: { using namespace DesignPattern_Decorator ; Component *p = new ConcreteDecoratorB( new ConcreteDecoratorA( new ConcreteComponent())) ; p->operation() ; }上面代码的关键之处在于Decorator的构造函数中传入了一个Component*指针,表明了它要作用的对象。