装饰器模式(Decorator Pattern),又叫作包装器模式(Wrapper Pattern)。指在不改变原有对象结构的基础情况下,动态地给该对象增加一些额外功能的职责。装饰器模式相比生成子类更加灵活。它属于对象结构型模式。
一、什么是装饰器模式
装饰器模式(Decorator Pattern),又叫作包装器模式(Wrapper Pattern)。指在不改变原有对象结构的基础情况下,动态地给该对象增加一些额外功能的职责。装饰器模式相比生成子类更加灵活。它属于对象结构型模式。
装饰模式和代理模式的功能是雷同的,两者区别是:
- 装饰器模式强调自身功能的扩展,是代理模式的一个特殊应用。
- 代理模式强调对代理过程的控制。
二、装饰器模式的结构
通常情况下,扩展一个类的功能会使用继承方式来实现。但继承具有静态特征,耦合度高,并且随着扩展功能的增多,子类会很膨胀。
如果使用组合关系来创建一个包装对象(即装饰对象)来包裹真实对象,并在保持真实对象的类结构不变的前提下,为其提供额外的功能,这就是装饰模式的目标。
模式的结构
装饰模式主要包含四个角色。
抽象构件(Component): 可以是一个接口或者抽象类,充当被装饰类的原始对象,规定了被装饰类的行为。
具体构件(ConcreteComponent): 实现/继承 Component的一个具体对象,即被装饰对象。通过装饰角色为其添加一些职责。
抽象装饰器(Decorator): 实现/继承 Component。通用的 ConcreteComponent的装饰列,其内部必然有一个属性指向 Component,主要是可以通过其子类扩展具体组件的功能。
具体装饰器(ConcreteDecorator): Decorator的具体实现类,并给具体构件对象添加附加的责任,一般为其特有的功能。
装饰器模式角色分配符合设计模式的里氏替换原则、依赖倒置原则,从而使得其具备很强的扩展性,最终满足开闭原则。
延伸阅读
优缺点
主要优点:
- 装饰器是继承的有力补充,比继承灵活,在不改变原有对象的情况下,动态的给一个对象扩展功能,即插即用
- 通过使用不用装饰类及这些装饰类的排列组合,可以实现不同效果
- 装饰器模式完全遵守开闭原则
主要缺点:
- 会出现更多的代码、更多的类,增加程序的复杂性。
文章标题:什么是装饰器模式,发布者:E.Z,转载请注明出处:https://worktile.com/kb/p/62032