一、定义
把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
二、使用场景
系统需要使用现有的类,而此类的接口不符合系统的需要,即接口不兼容。
三、UML类图
Adapter:抽象适配器,定义抽象转换接口。
ConcreteAdapter:具体适配器,实现抽象转换接口,把源接口转换成目标接口。
Adaptee:需要适配的类。
Client:客户端。
四、实现
//抽象适配器
public abstract class Adapter {
public abstract void operation();
}
//具体适配器
public class ConcreteAdapter extends Adapter {
private Adaptee adaptee = new Adaptee();
@Override
public void operation() {
System.out.println("适配操作");
adaptee.adaptedOperation();
}
}
//需要适配的类
public class Adaptee {
public void adaptedOperation() {
System.out.println("被适配操作");
}
}
//客户端
public class Client {
public static void main(String[] args) {
Adapter adapter = new ConcreteAdapter();
adapter.operation();
}
}
五、应用
例子:Android ListView
(ListView Adapter统一Item View)
在使用ListView的时候,需要设置Adapter,用于加载每个Item View的布局,并且进行数据绑定等操作。ListView最重要的问题是要解决每一项Item视图的输出,Item View千变万化,但终究它都是View类型,Adapter统一将Item View输出为View,这样就很好地应对了Item View的可变性。这虽然有些脱离Adapter模式将不兼容的接口转换为可用接口的使用场景,但也是Adapter模式的一种变种实现。
六、总结
Adapter模式的经典实现在于将原本不兼容的接口融合在一起,使之能够很好地进行合作。