适配器Adaptor是一种结构型设计模式,目的是把一个类的接口转换成客户希望的另外一个接口,对接口进行包装,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
设想这么几种情况,当我们想使用一个已经存在的类,而这个类的接口不符合需求时,或者当我们想创建一个可以复用的类,这个类可以与其它不相关的类或不可预见的类协同工作时,或者当我们想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口时,适配器模式就可以派上用场了。适配器有两种,类适配器和对象适配器,类适配器即多重继承,对一个接口与另外一个接口进行匹配,对象适配器则依赖于对象组合,保存被适配的类对象为自己的成员变量。
下面是适配器模式的类图:
在上面的类图中,Target与Client直接发生关系,定义了Client需要的接口,而Adaptee定义了已经存在的接口,与Client使用的接口不兼容,需要Adaptor来适配。类Adaotor模式中,Adaptor继承了Target和Adaptee,一般情况下,Target的继承方式为public,Adaptee的继承方式为private,这正是Client想要的,因为Client真正关心的是Target中的接口,而不关心具体的Adaptee。对象Adaptor中,Adaptor继承了Target,并且保存了Adaptee对象指针adaptee,使得适配工作也非常简单,直接操作adaptee指针即可。