Version: Next
Decorator装饰者模式
定义:动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更加灵活。
源发问题
对于一个对象添加额外的装饰,但如果装饰的组合方式较多,采用类定义的方式表达装饰效果,则类的数量会激增
解决方案
采用组合方式来表达装饰效果的解决方案。方案的基本思想是,讲需要装饰的类定义为抽象类Decorator,在模式结构中引入组成模式子结构,Decorator可以看作是组成模式的Composite类,而需要装饰的类ConcreateComponent看作是组成模式的Leaf,装饰类ConcreteDecoratorA、ConcreteDecoratorB是Decorator的子类。这种设计可使任意装饰类都可看作组合类,可向其内部添加其他装饰类和需要装饰的类。
在动态的对象层面,装饰对象可构成链表(树)结构,而需要装饰的类对象是链表的最后一个节点(树的叶子节点)。向层次较高的装饰对象发送消息,消息会沿着链表(树)传播。在消息传播过程中,装饰效果功能被以此调用
仿佛一个俄罗斯套娃
UML类图
代码
优缺点
- 优点 很容易为需要装饰的类添加装饰,看起来好像定义了新类,并且装饰方式可以自由组合 装饰对象和需要装饰的对象具有共同的操作接口
- 缺点 和组成模式类似