定義:
- 將一個類的接口轉(zhuǎn)換成期望的另一個接口, 使原有不兼容的接口可以正常工作
類型:
- 結(jié)構(gòu)型
使用場景
- 已經(jīng)存在的類, 它的方法和需求不匹配時(方法結(jié)果相同或相似)
適配器不應當在軟件的設計階段就考慮, 他是隨著軟件的維護, 由不同產(chǎn)品, 不同廠家造成功能類似而接口不相同情況下的解決方案.
coding
適配器的標準模型非常簡單, 包括被適配者Adaptee, 適配目標Target和適配器Adapter.
public class Adaptee {
public void specialRequest(){
System.out.println("第三方接口");
}
}
public interface Target {
void request();
}
public class Adapter implements Target{
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
/**
* 標準請求
*/
@Override
public void request() {
System.out.print("適配器適配");
adaptee.specialRequest();
}
}
類圖![I1HCUP1IL1}JVUI5IWU4$3.png
使用方法
public class Main {
public static void main(String[] args) {
Target target = new Adapter(new Adaptee());
target.request();
}
}
接下來用一個電源適配器的例子來實際編碼以下, 這個電源適配器需要將220伏電壓轉(zhuǎn)換成5V電壓.
- 被適配者 AC220
public class AC220 {
public int output(){
return 220;
}
}
適配目標DC5V
public interface DC5 {
int dc5();
}
電源適配器
public class AC220toDC5Adapter implements DC5 {
private AC220 ac220;
public AC220toDC5Adapter(AC220 ac220) {
this.ac220 = ac220;
}
@Override
public int dc5() {
// 將220伏電壓轉(zhuǎn)換為5V
return ac220.output()/44;
}
}
測試
public class Test {
public static void main(String[] args) {
DC5 dc5 = new AC220toDC5Adapter(new AC220());
System.out.println(dc5.dc5());
}
}
優(yōu)點:
- 解決了現(xiàn)有類和目標類接口不匹配的問題
- 目標類和適配類解耦, 提高程序擴展性
缺點:
- 增加代碼的復雜度.
- 增加了系統(tǒng)的復雜性.