适配器模式

配器模式定义如下:

适配器模式(Adapter Pattern):将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。

    从定义中,很容易理解该模式所要解决的问题和解决方法。在实际开发中,由于种种原因(可能是历史原因,可能是设计与某些外部实现不匹配),常会出现一些接口或模块间不兼容的情况。这时,可以通过引入一个适配器(Adapter)来作为一个”和事老“,在中间起到兼容的作用。

    适配器模式可以分为对象适配器和类适配器。前者中,适配器与适配者之间是关联关系,后者是继承或者实现关系。
  • 对象适配器的使用频率会相对较高,它的实现结构通常如下:

    Target是抽象的对外接口,定义了request方法。而Adaptee是提供具体实现的模块,提供的方法却是spciflicRequest方法。因此是不兼容的,这是引入了Adapter---适配器!由它来实现抽象接口Target,持有被适配者的对象,并在request实现中调用真正的功能模块Adaptee的spciflicRequest。这样两端不兼容的部分就通过适配器连接了起来。

  • 类适配器与对象适配器的最大区别在于适配器与适配者间的关系。类适配器中的关系为继承或者实现关系。
    一类较少使用的变种:双向适配器。适配器的两端均即充当适配者的角色又充当调用端的角色。
    另一类特殊变种:缺省适配器。如果一个接口定义了10个方法,但某些实现中只需要其中的3个,直接使用的情况下,每个实现类都要实现这10个方法。这时可以引入一个抽象类实现接口,并未每个接口定义的方法提供一个空实现。这样具体实现类继承这个抽象类,就可以有选择的实现其中的一部分。这时的这个抽象类,我们称为缺省适配器。
 
总结:
  • 优点:
    • 解决不兼容场景
    • 调用方和实现方解耦,增加透明性
    • 已有模块和功能的复用,同时不修改它们的代码
    • 一个对象适配器可以适配多个适配者,简化对外接口
  • 缺点:
    • 类适配器由于Java不支持多继承,一次只能适配一个适配者
    • 类适配器适配者不能为final类
    • 类适配器的目标抽象类(target)只能为接口,因为不能多继承,有局限性
posted @ 2016-01-26 11:47  进击的璐璐  阅读(389)  评论(0编辑  收藏  举报