装饰模式
目录
定义
装饰模式是一种结构型设计模式,允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。
类图
场景
如果希望无需修改原有代码的前提下,运行时动态的为对象添加额外的行为,可以使用装饰模式。
如果用继承来拓展对象的方案难以实现或者根本不行,可以使用装饰模式。
实现方式
-
确保业务逻辑可以拆分为一个基本的组件和多个开拆分的额外逻辑层。
-
找出基本组件和可选层次的通用方法。创建一个组件接口并且在其中声明这些方法。
-
创建一个具体组件类,并定义其基础行为。
-
创建装饰基类。
-
确保所有类实现组件接口。
-
将装饰基类拓展为具体装饰。具体方法一定要调用父类方法,并在调用前后执行自身的装饰方法。
-
客户端负责创建装饰并使用。
优点
无需创建子类就可以拓展对象的行为
可以运行时添加或者删除对象的功能
可以用多个装饰器来封装对象,实现多种行为。
符合单一职责原则
缺点
在封装栈中删除特定封装器比较困难。
装饰器受顺序影响。
各层的初始化代码开起来比较糟糕
The end!