适配器模式
将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。
在适配器模式中,我们通过增加一个新的适配器类来解决接口不兼容的问题,使得原本没有任何关系的类可以协同工作。
根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器和类适配器两种,在对象适配器模式中,适配器与适配者之间是关联关系;在类适配器模式中,适配器与适配者之间是继承(或实现)关系。
适配器模式的结构
- 目标抽象类:Target,该角色把其他类转换为我们期望的接口,可以是一个抽象类或接口,也可以是具体类。
- 被适配者: Adaptee ,原有的接口,也是希望被适配的接口。
- 适配器: Adapter, 将被适配者和目标抽象类组合到一起的类。
类适配器
目标抽象接口
public interface Target{
public void request();
}
被适配者
public class Adaptee{
public void specificRequest(){
System.out.println("适配者中的业务代码被调用!");
}
}
适配器
public class ClassAdapter extends Adaptee implements Target{
public void request() {
specificRequest();
}
}
测试
//客户端代码
public class ClassAdapterTest{
public static void main(String[] args){
Target target = new ClassAdapter();
target.request();
}
}
对象适配器
对象适配器类
public class ObjectAdapter implements Target{
private Adaptee adaptee;
public ObjectAdapter(Adaptee adaptee){
this.adaptee = adaptee;
}
public void request(){
adaptee.specificRequest();
}
}
测试
public class ObjectAdapterTest{
public static void main(String[] args){
System.out.println("对象适配器模式测试:");
Adaptee adaptee = new Adaptee();
Target target = new ObjectAdapter(adaptee);
target.request();
}
}