装饰器模式
装饰器是指能动态地为对象添加额外的功能的一种结构型设计模式。
特点
- 不修改原有代码的情况下,动态地扩展一个对象的功能。
- 支持多个装饰器叠加使用
- 透明性,装饰后的对象与原对象保持一致,客户端无需感知装饰过程
结构模式与实现
python 中 @decorator
语法就是装饰器模式的简化实现,因此这里就不再做代码示例,详情见 装饰器模式
要说不同之处,装饰器模式的本质是面向对象的,也就是用于装饰类实例。而python中的@decorator
语法则是函数式编程的装饰器,其本质是函数式编程中的高阶函数。或者说@decorator
能起到装饰器模式的作用。
适用场景
- 动态拓展对象功能
- 替代多层继承
- 不可修改的类做功能增强
优缺点
- 优点:
- 符合开闭原则,扩展性良好
- 符合单一职责原则,每个装饰器只负责一个功能
- 装饰顺序可控,支持自由组合
- 缺点:
- 嵌套装饰,嵌套层级过多,代码可读性差
- 调试困难