目录
[显示]

1.摘要

Adapter模式一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。在需要与其他系统对接的场景经常会用到这个模式。

2. 针对问题

适配器(Adapter)的概念在生活中应用相当广泛,比如电器的电源适配器、可以换头的万能螺丝刀等等。将这个概念放在软件开发中:将一个接口转换成我们希望的接口,就是Adapter模式。

3. 介绍

将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

4. 实现

4.1. 类适配器

类适配器使用多重继承对一个接口与另一个接口进行匹配,如图:

4.2. 对象适配器

对象适配器依赖于对象组合,如下图:

两种方式都实现了将SpecificRequest接口到Request接口的转换。

4.3. 可插入的适配器

以上两种方式介绍了如何把一个已知类的接口“转换”(适配)成另一个已知类,也就是已知Target和Adaptee,创建Adapter。接下来的问题是:如何把未知类的接口适配到已知类。这里实际上是已知Adaptee,创建Target和Adapter的过程。
《GOF》书中对这种方式虽然做了大量的描述,但是不知是不是翻译的原因,里面的描述基本上根本看不懂。所以我只能用自己的话试着重新描述一下可插入适配器的实现方式:
1、为Adaptee找到一个“窄”接口。实质上是从可能的Adaptee类中抽象出Target类需要声明的函数。
2、实现Target与Adapter,《GOF》书中列举了三种方式:
    (1)使用抽象操作。
    把将Target需要声明的函数放入Client并作为抽象函数,需要实现某个Adapter时继承这个类,静态图如下:
    
    (2)使用代理对象
    将Target声明为一个单独接口,并在Client保存Target对象的引用。需要实现某个Adapter时继承Target,并将Adapter实例放入Client。
    
    (3)参数化的适配器
    书中举了Smalltalk的例子,可惜我并不懂这门语言,而文字描述根本不像是想让人看明白的样子……

5. 特点

1、用于将一个或几个接口转化为另一个接口,经常在与其他系统对接时使用。
2、利用可插入适配器的特性,可以在不改变不改变原有系统的基础上,将新的接口接入原系统。

 

6. 相关文章

设计模式总结

7. 参考文章

  1. 《设计模式_可复用面向对象软件的基础》