设计模式 - 装饰者模式
定义
Attach additional responsibilities to an object dynamically.
Decorators provide a flexible alternative to subclassing for extending functionality.
UML
实例
类的扩展extend,串口接收数据,
- 无需修改代码即可使用对象,且在运行时为对象新增额外的行为。
- 不用继承来扩展对象行为。
比较
比较 | 装饰者模式 | 备注 |
---|---|---|
适配器模式 | 装饰者能在不改变对象接口的前提下强化对象功能,支持递归组合 | 适配器对已有对象的接口进行修改,为被封装对象提供不同的接口,不支持递归 |
代理模式 | 装饰者为对象提供加强的接口 | 为对象提供相同的接口 |
责任链模式 | 各种装饰可以在遵循基本接口的情况下扩展对象的行为,无法中断请求的传递 | 责任链的管理者可以相互独立地执行一切操作,还可以随时停止传递请求 |
组合模式 | 装饰者类似于组合,但其只有一个子组件;为被封装对象添加额外的职责 | 组合仅对其子结点的结果进行汇总 |
策略模式 | 装饰者可以更改对象的外表 | 策略模式可以改变其本质 |
代理模式 | 装饰者的生成由客户端进行控制 | 代理自行管理其服务对象的生命周期 |
装饰者和代理有着相似的结构,都基于组合原则,即一个对象将部分工作委派给另外一个对象。
装饰者和组合的设计都可以和原型模式配合,用原型复制复杂结构,而非从零开始重新构造。