適配器模式是指將一個類的接口轉換成用戶期望的另一個接口,使得原本不兼容的類可以一起工作。比如:手機充電需要5V的電壓,而生活供電是220V電壓,所以給手機充電就需要一個5V的充電器,這個充電器就是適配器。由此可見,適配器模式的出現是爲了解決現有的類或接口不能滿足需求,且無法直接修改的問題。
適配器模式包含的角色如下:
- 被適配者(Adaptee):比如:220V的電壓就是被適配者,表示已經存在的類或對象;
- 目標角色(Target):比如:5V電壓就是目標角色,也就是我們的期望接口、抽象類或具體類;
- 適配器(Adapter):比如:充電器就是適配器,它可以調用Adaptee和Target進行適配;
總之一句話,適配器模式是指Adapter可以根據Target接口中的方法來調用Adaptee中的方法。
其實現方案有兩種:類適配器和對象適配器。
類適配器
public class Adaptee {
public int output220V() {
int output = 220;
System.out.println("輸出" + output + "V電壓");
return output;
}
}
public interface Target {
int output5V();
}
public class Adapter extends Adaptee implements Target {
@Override
public int output5V() {
int output = super.output220V() / 44;
System.out.println("輸出" + output + "V電壓");
return output;
}
}
public class Test {
public static void main(String[] args) {
Target target = new Adapter();
target.output5V();
}
}
輸出220V電壓
輸出5V電壓
對象適配器
public class Adapter implements Target {
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public int output5V() {
int output = adaptee.output220V() / 44;
System.out.println("輸出" + output + "V電壓");
return output;
}
}
public class Test {
public static void main(String[] args) {
Target target = new Adapter(new Adaptee());
target.output5V();
}
}
總結
- 系統需要使用一些現有的類,這些類的接口(方法名等)無法改變且不符合需要,則可以用適配器模式;
- 類適配器一次最多隻能適配一個Adaptee,因爲Java不支持多繼承。