设计模式对比学习

装饰器模式 vs 适配器模式 vs 代理模式

  共通点:

  • 都是对被依赖类/被依赖对象的封装

  意图方面:

  • 装饰模式的重点在于“扩展”:动态地为一个类添加额外的职责;
  • 适配器和代理模式体现的是封装:
    •  适配器的封装重点在于“隐藏”内部变化(对适配器来说也是伪装),是系统/组件升级良药,使得新旧系统兼容;
    •  代理模式定义是为其他对象提供一种代理以控制对这个对象的访问,重点在于“控制”。

  实现方面:

  • 装饰器模式发生在运行时,属于动态扩展,使用时将被装饰对象作为参数传递给装饰器的构造函数,客户知道被装饰的对象;
  • 适配器模式和代理模式均在编译期实现。被适配和被代理的对象对于客户透明;

 

适配器模式 vs 外观模式

  共通点:

  • 封装

  意图方面:

  • 适配器模式改变单个接口的形式,用于不同组件间的兼容;
  • 外观模式为客户提供包装了多个接口的统一接口,通过简化接口方便客户调用(子接口未屏蔽,仍然可定制性地调用),和业务相关性很大,可以说是大粒度的适配器;

  实现方面:

  • 本质上没有定义新的接口,为事后设计;
  • 本质上定义了新的接口,必须事前设计;

模板方法模式 vs 策略模式

  共通点:

  • 都是通过延迟算法/策略的实现,达到良好扩展性的目的。

  意图方面:

  • 模板方法模式的重点在于其描述固定的算法框架/流程;
  • 策略模式侧重于对一组相似算法/算法簇的包装,彼此可以相互替换;

  实现方面:

  • 模板方法模式使用继承的手段,覆盖子过程的实现方法;
  • 策略模式使用组合的手段,注入不同的算法对象;

 

posted @ 2013-08-26 09:35  infinityu  阅读(191)  评论(0编辑  收藏  举报