适配器模式
适配接口到另一个已存在的接口
适配器模式连接两个不相关接口的对象
目的:两个不相关接口一起工作。解决了新旧接口的兼容性问题。
代码如下: 以电压适配器为例
/**
* 插座,标准电压为220V
*
* @author 西邮陈冠希
* @date 2019/8/2
**/
public class Socket {
Volt getStandardVolt() {
return new Volt(220);
}
}
/**
* 电压类
*
* @author 西邮陈冠希
* @date 2019/8/2
**/
public class Volt {
private int volts;
public Volt(int volts) {
this.volts = volts;
}
public int getVolts() {
return volts;
}
public void setVolts(int volts) {
this.volts = volts;
}
}
/**
* 插座适配器,调用不同的方法,获得不同的电压。即把电压和插座两个不相关的类关联起来
*
* @author 西邮陈冠希
* @date 2019/8/2
**/
public interface SocketAdapter {
int TWO = 2;
int TEN = 10;
int STANDARD = 220;
Volt get2Volt();
Volt get10Volt();
Volt get220Volt();
}
public class SocketAdapterImpl implements SocketAdapter {
private Socket socket = new Socket();
private Volt convert(Volt volt, int i) {
return new Volt(volt.getVolts() / i);
}
@Override
public Volt get2Volt() {
return convert(socket.getStandardVolt(), 110);
}
@Override
public Volt get10Volt() {
return convert(socket.getStandardVolt(), 22);
}
@Override
public Volt get220Volt() {
return socket.getStandardVolt();
}
}
当我们需要通过插座获取电压时,很明显,只能获取220的标准电压,如果需要获取2V,10V等不同的电压,那就需要通过电压适配器去转换为不同的电压。
测试类:
public class Demo {
public static void main(String[] args) {
SocketAdapter socketAdapter = new SocketAdapterImpl();
Volt v2 = getVolt(socketAdapter, SocketAdapter.TWO);
System.out.println(v2.getVolts());
Volt v10 = getVolt(socketAdapter, SocketAdapter.TEN);
System.out.println(v10.getVolts());
Volt v220 = getVolt(socketAdapter, SocketAdapter.STANDARD);
System.out.println(v220.getVolts());
}
private static Volt getVolt(SocketAdapter socketAdapter, int i) {
switch (i) {
case SocketAdapter.TWO:
return socketAdapter.get2Volt();
case SocketAdapter.TEN:
return socketAdapter.get10Volt();
default:
return socketAdapter.get220Volt();
}
}
}