《设计模式之禅》读书笔记--(26)结构类模式比较

结构类模式包括适配器模式桥梁模式组合模式装饰模式门面模式享元模式代理模式。它们都是通过组合类或对象产生更大结构以适应更高层次的逻辑需求。

代理模式与装饰模式

装饰模式就是代理模式的一个特殊应用,两者的共同点是都具有相同的接口,不同点则是代理模式着重对代理过程的控制,而装饰模式则是对类的功能进行加强或减弱,它着重类的功能变化。

代理模式是把当前的行为或功能委托给其他对象执行,代理类负责接口限定:是否可以调用真实角色,以及是否对发送到真实角色的消息进行变形处理,它不对被代理类的功能进行任何处理,保证原汁原味的调用。

装饰模式是在要保证接口不变的情况下加强类的功能,它保证的是被修饰的对象功能比原始对象丰富(当然,也可以减弱),但不做准入条件判断和准入参数过滤,如是否可以执行类的功能,过滤输入参数是否合规等。

装饰模式与适配器模式

装饰模式与适配器模式的功能相似:都是包装作用,都是通过委托方式实现其功能。不同点是:装饰模式包装的是自己的兄弟类,隶属于同一个家族(相同接口或父类),适配器模式则修饰非血缘关系类,把一个非本家族的对象伪装成本家族的对象,注意是伪装,因此它的本质还是非相同接口的对象。

区别

  • 意图不同。装饰模式的意图是加强对象的功能,它不改变类的行为和属性,只是增加或减弱功能;而适配器模式关注的则是转化,它的主要意图是两个不同对象之间的转化。
  • 施与对象不同。装饰模式装饰的对象必须是相同的接口或父类,只要在具有相同的属性和行为的情况下,才能比较行为是增加还是减弱;适配器模式则必须是两个不同的对象,因为它着重于转换,只有两个不同的对象才有转换的必要。
  • 场景不同。装饰模式在任何时候都可以使用,只要是想增强类的功能;而适配器模式则是一个补救模式,一般出现在系统成熟或已经构建完毕的项目中,作为一个紧急处理手段使用。
  • 扩展性不同。装饰模式很容易扩展,但适配器模式就不同了,它在两个不同对象之间架起了一座沟通的桥梁,建立容易,去掉就比较困难了,需要从系统整体考虑是否能够撤销。

猜你喜欢

转载自blog.csdn.net/u011475134/article/details/80558581