UML类图
使用场景
希望复用一些已经存在的类或方法,但这些方法不能直接转换成目标接口,所以需要增加配适器中转。如Client中耦合的是Target类,希望复用Adaptee中的方法,而Adaptee非Target的子类,因此Adaptee和Target中大量函数名可能不一样,因此无法在不修改Client中大量代码的情况下直接复用Adaptee类,所以需要增加配适器,即Target的子类Adapter,在Adapter中直接调用希望复用的Adaptee的方法即可。
代码实现
客户端中已经耦合的抽象方法
public interface Target {
public boolean request();
}
可以复用的类
public class Adaptee {
public boolean httpRequest(){
System.out.println("一个Http Request");
return true;
}
//..其他方法
}
在Client中希望不修改原有的耦合抽象类就能直接使用Adaptee中的方法
public class Client {
public static void main(String[] args) {
Target target = new Adapter();
target.request(); //由于使用了配适器,因此无需修改程httpRequest()就能直接使用Adaptee中的方法
//target.otherMethods(); ...省略其他函数的调用
}
}
配适器
/**
* 配适器类,主要负责调用adaptee中相同性质的方法,或需要复用的方法。
*/
public class Adapter implements Target {
private Adaptee adaptee = new Adaptee();
@Override
public boolean request() {
return adaptee.httpRequest();
}
}
注意
在系统的设计之初,一般不考虑该模式,甚至避免使用该模式,该模式主要在已经存在的类和函数进行复用的情况下使用。