1. 定义
The Decorator Pattern attaches additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality.
(装饰者模式可以动态地给一个对象增加其他职责。就扩展对象功能来说,装饰者模式比生成子类更为灵活。)
2. 类图及描述

Component(被装饰对象基类)
l 定义对象的接口,可以给这些对象动态增加职责;
ConcreteComponent(具体被装饰对象)
l 定义具体的对象,Decorator可以给它增加额外的职责;
Decorator(装饰者抽象类)
l 维护一个指向Component实例的引用,并且定义了与Component一致的接口;
ConcreteDecorator(具体装饰者)
l 具体的装饰对象,给内部持有的具体被装饰对象增加具体的职责;
3. 应用场景及优缺点
装饰者模式的应用场景:
(1) 想透明并且动态地给对象增加新的职责的时候。
(2) 给对象增加的职责,在未来存在增加或减少可能。
(3) 用继承扩展功能不太现实的情况下,应该考虑用组合的方式。
装饰者模式的优点:
(1) 通过组合而非继承的方式,实现了动态扩展对象的功能的能力。
(2) 有效避免了使用继承的方式扩展对象功能而带来的灵活性差,子类无限制扩张的问题。
(3) 充分利用了继承和组合的长处和短处,在灵活性和扩展性之间找到完美的平衡点。
(4) 装饰者和被装饰者之间虽然都是同一类型,但是它们彼此是完全独立并可以各自独立任意改变的。
(5) 遵守大部分GRASP原则和常用设计原则,高内聚、低偶合。
装饰者模式的缺点:
(1) 装饰链不能过长,否则会影响效率。
(2) 因为所有对象都是Component,所以如果Component内部结构发生改变,则不可避免地影响所有子类(装饰者和被装饰者),也就是说,通过继承建立的关系总是脆弱地,如果基类改变,势必影响对象的内部,而通过组合(Decoator HAS A Component)建立的关系只会影响被装饰对象的外部特征。
(3)只在必要的时候使用装饰者模式,否则会提高程序的复杂性,增加系统维护难度。
本文介绍了装饰者模式的概念、类图及应用场景。装饰者模式能够动态地给对象增加职责,相较于继承更加灵活。文章还探讨了该模式的优缺点。
1910

被折叠的 条评论
为什么被折叠?



