将对象和类组装成较大的结构, 并同时保持结构的灵活和高效。
装饰器模式
封装器是装饰模式的别称, 这个称谓明确地表达了该模式的主要思想。 “封装器” 是一个能与其他 “目标” 对象连接的对象。 封装器包含与目标对象相同的一系列方法, 它会将所有接收到的请求委派给目标对象。 但是, 封装器可以在将请求委派给目标前后对其进行处理, 所以可能会改变最终结果。
使用场景
如果需要对类的功能进行扩展,但是又不想要通过继承增加新的方法,或者根据不同的情况执行不同的复合策略,导致类的方法非常臃肿。
但是其中的方法都是某些固定方法的组合,我们可以采用装饰器模式。
使用装饰器模式
有一个组件接口,是所有要装饰的目标类和基本装饰器的通用接口,然后根据不同的功能实现Base Decorator。
具体调用的方法使用嵌套的模式,每个装饰器执行完自己的方法之后,再执行被装饰的方法,由于实现的同样的接口,直接调用即可。
类似于 过滤器和拦截器。
与其他模式的比较
装饰和代理模式
两者结构相似,但是意图不同。两者都是一个对象将部分工作委派给另一个对象。
但是代理模式是由自己管理其服务对象的生命周期,自己决定嵌套代理的顺序。
装饰模式将嵌套顺序交给客户进行控制。