装饰模式
模式描述
装饰模式(Decorator),动态地给一个对象添加一些额外的职责,装饰模式比生成子类更加灵活。
优点
- 比静态的继承更加灵活;
- 避免高层接口的功能太复杂。
缺点
- 有很多小对象;
应用场景
- 不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责;
- 不能使用子类扩充功能时;
- 撤销对象功能;
DATE | CHANGELOG |
---|---|
2023年4月26日 | 初始化 |
2023年4月30日 | 添加 Go 语言实现 |
UML 类图
classDiagram
class Component {
<<interface>>
operation()
}
class Decorator {
<<abstract>>
-Component Component
operation()
}
class ConcreteComponent {
operation()
}
class ConcreteDecoratorA {
operation()
-addState
}
class ConcreteDecoratorB {
operation()
-addBehavior
}
Component <|.. ConcreteComponent
Component <|.. Decorator
Decorator o.. Component
Decorator <|-- ConcreteDecoratorA
Decorator <|-- ConcreteDecoratorB
Component <-- Client
参与者
Component 接口
- 定义方法,能够动态地添加职责。
ConcreteComponent 类
- Component 接口的实现,有基础的功能。
Decorator 抽象类
- 实现 Component 接口,并组合一个 Component 对象。
ConcreteDecoratorX 类
- 继承 Decorator 抽象类,用来添加职责。
Client 类
- 客户端
数据流
- client 创建一个 Component;
- 通过 Decorator 层层包装 client;
- 调用 Component 提供的方法进行工作;
相关模式
- 适配器模式:装饰者模式仅改变对象职责,而适配器模式将给对象一个全新的接口;
- 组合模式:装饰器模式被认为是退化为只有一个组件的组合;
- 策略模式:装饰器模式改变的是对象外表,而策略模式改变对象内核。
补充
- 装饰模式使得核心职责和装饰功能区分开,减少重复的装饰逻辑;