Adapter是什么?
出过国的朋友都知道,中国和外国的电源插头不同,出国前要买个适配器,用于适配插座。适配器的作用就是把一个类的接口转换成客户希望的另一个接口。
Adapter的图如下,可以明显看出,对client的call进行了转换。Adaptee指已经存在,需要进行适配的接口。
Adapter可以使用继承和组合两种方式实现。
Adatper的应用举例
1. 读卡器,适配不同的卡。
2. Wrapper,在原来的程序上包一层,用于适配新的情况。
Adapter的示例
为了实现把方形插头变换成圆形插头的功能。
1. 使用继承的方式,即is-a关系
public class CylindricalSocket {
public String supply(String cylinStem1, String cylinStem1) {
return ("Power power power...");
}
}
public class RectangularAdapter extends CylindricalSocket {
public String adapt(String rectaStem1, Sting rectaStem2) {
//some conversion logic
String cylinStem1 = rectaStem1;
String cylinStem2 = rectaStem2;
return supply(cylinStem1, cylinStem2);
}
}
public class RectangularPlug {
private String rectaStem1;
private String rectaStem2;
public getPower() {
RectangulrAdapter adapter = new RectangulrAdapter();
String power = adapter.adapt(rectaStem1, rectaStem2);
System.out.println(power);
}
}
2. 使用组合关系,即has-a关系
public class CylindricalSocket {
public String supply(String cylinStem1, String cylinStem1) {
return ("Power power power...");
}
}
public class RectangularAdapter {
private CylindricalSocket socket;
public String adapt(String rectaStem1, Sting rectaStem2) {
//some conversion logic
socket = new CylindricalSocket();
String cylinStem1 = rectaStem1;
String cylinStem2 = rectaStem2;
return socket.supply(cylinStem1, cylinStem2);
}
}
public class RectangularPlug {
private String rectaStem1;
private String rectaStem2;
public getPower() {
RectangulrAdapter adapter = new RectangulrAdapter();
String power = adapter.adapt(rectaStem1, rectaStem2);
System.out.println(power);
}
}
链接:http://javapapers.com/design-patterns/adapter-pattern/