解释
装饰模式(Decorator),又名包装模式(Wrapper),动态地给一个对象添加一些额外的职责。
UML图
抽象构件(Component)角色:给出一个抽象接口,以规范准备接受附加责任的对象。
具体构件(Concrete Component)角色:定义一个将要接收附加责任的类。
装饰(Decorator)角色:持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口。
具体装饰(Concrete Decorator)角色:负责给构件对象“贴上”附加的责任。
工作原理
装饰模式的链式引用关系使装饰模式看上去像是一个LinkedList,如下图所示。
优缺点
优点:
(1)通过组合而并非继承的方式,实现了动态扩展对象的功能的能力;
(2)有效避免了使用继承的方式扩展对象而带来的灵活性差,子类无限扩张的问题。
缺点:
(1)装饰链不能过长,否则会影响效率;
(2)会提高程序的复杂性,增加系统维护难度。
应用场景
(1)想透明并且动态地给对象增加新的职责的时候;
(2)给对象增加的职能,在未来存在增加或减少可能;
(3)用继承扩展功能不太现实的情况下,应该考虑用组合的方式。