首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 設計模式:適配器模式通俗講解(電源適配器實例 + 雙向適配代碼實現)

     編輯:Java 綜合教學

適配器模式:讓不兼容的接口協同工作

適配器模式將一個類的接口轉換為客戶期望的另一個接口。生活中最典型的例子是電源適配器:筆記本電池需要直流低壓,插座提供交流高壓,適配器在中間完成轉換,使兩者能夠協作。

角色對應

  • Target(目標接口):Computer — 客戶期望的接口(battery())
  • Adaptee(被適配者):Power — 現有接口(electric())
  • Adapter(適配器):實現 Computer、組合 Power,在 battery() 中調用 electric()

代碼實現:雙向適配

// 目標接口:電腦端
interface Computer { void battery(); }
// 被適配者:電源端
interface Power { void electric(); }

// 具體實現
class ComputerImpl implements Computer {
    public void battery() { System.out.println("電池充電中..."); }
}
class PowerImpl implements Power {
    public void electric() { System.out.println("輸出 220V 交流電"); }
}

// 適配器:同時實現兩個接口,構造器注入對應端
class Adapter implements Computer, Power {
    private Power power;
    private Computer computer;

    public Adapter(Power power) { this.power = power; }
    public Adapter(Computer computer) { this.computer = computer; }

    // 電腦視角:需要電池充電 -> 調用電源輸出
    @Override public void battery() { if (power != null) power.electric(); }
    // 電源視角:需要輸出電能 -> 調用電池充電
    @Override public void electric() { if (computer != null) computer.battery(); }
}

客戶端測試

場景一:有電源,適配給電腦

public class Client1 {
    public static void main(String[] args) {
        Computer computer = new ComputerImpl();
        Adapter adapter = new Adapter(computer); // 適配器接電腦端
        usePower(adapter); // 傳入 Power 接口
    }
    static void usePower(Power p) { p.electric(); } // 期望 Power
}
// 輸出:電池充電中...

場景二:有電腦,適配給電源

public class Client2 {
    public static void main(String[] args) {
        Power power = new PowerImpl();
        Adapter adapter = new Adapter(power); // 適配器接電源端
        useComputer(adapter); // 傳入 Computer 接口
    }
    static void useComputer(Computer c) { c.battery(); } // 期望 Computer
}
// 輸出:輸出 220V 交流電

模式變體對比

本文示例為對象適配器,並展示了雙向適配(同時實現兩接口)的特殊形式,實際項目中通常單向適配即可。

應用場景

  • 第三方庫接口與系統領域模型不匹配
  • 舊系統遷移,新接口需兼容老實現
  • 統一多種不同 SDK 的調用入口(如支付渠道、日誌框架、雲存儲)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
類型實現方式優點缺點
類適配器繼承 Adaptee + 實現 Target可覆蓋 Adaptee 方法Java 單繼承限制,無法適配 Adaptee 子類
對象適配器組合 Adaptee 實例 + 實現 Target可適配 Adaptee 及其所有子類,符合合成復用原則需委託調用,略繁瑣
接口適配器實現 Target 默認空方法,子類按需覆蓋避免實現大接口所有方法非標準適配器,屬於門面/抽象類變體