1.代理模式VS装饰模式
装饰模式就是代理模式的一个特殊应用,两者的共同点是都具有相同的接口,不同点则是代理模式着重对代理过程的控制,而装饰模式则是对类的功能进行加强或减弱,它着重类的功能变化。
1.1最佳实践
代理模式是把当前的行为或功能委托给其他对象执行,代理类负责接口限定:是否可以调用真实角色,以及是否对发送到真实角色的消息进行变形处理,它不对被主题角色(也就是被代理类)的功能做任何处理,保证原汁原味的调用。代理模式使用到极致开发就是AOP。
装饰模式是在要保证接口不变的情况下加强类的功能,它保证的是被修饰的对象功能比原始对象丰富(当然,也可以减弱),但不做准入条件判断和准入参数过滤,如是否可以执行类的功能,过滤输入参数是否合规等,这不是装饰模式关心的。
2.适配器模式VS装饰模式
适配器模式和装饰模式在通用类图上没有太多的相似点,差别比较大,但是它们有相似的地方:都是包装作用,都是通过委托方式实现其功能。不同点:装饰模式包装的是自己的兄弟类,隶属于同一个家族,适配器则修饰非血缘关系类,把一个非本家族的对象伪装成本家族的对象,注意是伪装,因此它的本质还是非相同接口的对象。
2.1最佳实践
我们发现这两个模式有较多的不同点。
- 意图不同
装饰模式的意图是加强对象的功能;而适配器模式关注的则是转化,它的主要意图是两个不同对象之间的转化。 - 施与对象不同
装饰模式装饰的对象必须是自己的同宗,也就是相同的接口或父类,只要在具有相同的属性和行为的情况下,才能比较行为是增加还是减弱;适配器模式则必须是两个不同的对象,因为它着重与转换,只有两个不同的对象才能有转换的必要。 - 场景不同
装饰模式在任何时候都可以用,只要是想增强类的功能,而适配器模式则是一个补救模式,一般出现在系统成熟或已经构建完毕的项目中,作为一个紧急处理手段采用。 - 扩展性不同
装饰模式很容易扩展。