Version: Next

Decorator装饰者模式

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

源发问题

对于一个对象添加额外的装饰,但如果装饰的组合方式较多,采用类定义的方式表达装饰效果,则类的数量会激增

解决方案

采用组合方式来表达装饰效果的解决方案。方案的基本思想是,讲需要装饰的类定义为抽象类Decorator,在模式结构中引入组成模式子结构,Decorator可以看作是组成模式的Composite类,而需要装饰的类ConcreateComponent看作是组成模式的Leaf,装饰类ConcreteDecoratorA、ConcreteDecoratorB是Decorator的子类。这种设计可使任意装饰类都可看作组合类,可向其内部添加其他装饰类和需要装饰的类。

在动态的对象层面,装饰对象可构成链表(树)结构,而需要装饰的类对象是链表的最后一个节点(树的叶子节点)。向层次较高的装饰对象发送消息,消息会沿着链表(树)传播。在消息传播过程中,装饰效果功能被以此调用

仿佛一个俄罗斯套娃

UML类图

image-20200414213039008

代码

优缺点

  • 优点 很容易为需要装饰的类添加装饰,看起来好像定义了新类,并且装饰方式可以自由组合 装饰对象和需要装饰的对象具有共同的操作接口
  • 缺点 和组成模式类似