装饰者模式 Decorator

发布时间 2023-12-21 08:54:44作者: 梅丹隆

一、定义

  • 在不改变原有对象的基础上,将功能附加到对象上
  • 提供了比继承更有弹性的替代方案(扩展原有对象)

类似于游戏中的Buff,当一个英雄获得了红/蓝Buff时,原英雄能力不变,又额外增加了Buff相应属性

二、适用场景

  • 扩展一个类的功能或给一个类添加附加的职责
  • 动态的给一个对象添加功能,这些功能可以再动态的撤销

三、优缺点

1、优点

  • 是继承的有力补充,比继承灵活,不改变原有对象的情况下给一个对象扩展功能
  • 通过不同的装饰者类以及这些装饰者类的排列组合,可以实现不同的效果
  • 符合开闭原则 OpenClose

2、缺点

  • 会出现更多的代码、更多的类,增加程序的复杂性
  • 动态装饰时,多层装饰时会更复杂

四、代码实现

https://github.com/Meidanlong/all-in-one/tree/master/design/src/main/java/com/mdl/design/pattern/structural/decorator

简单装饰者
image.png
抽象装饰者
image.png