適配器模式
適配接口到另一個已存在的接口
適配器模式連接兩個不相關接口的對象
目的:兩個不相關接口一起工作。解決了新舊接口的兼容性問題。
代碼如下: 以電壓適配器爲例
/**
* 插座,標準電壓爲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();
}
}
}