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

Java 設計模式:適配器模式(Adapter Pattern)詳解與實戰

     編輯:Java 相關知識

什麼是適配器模式?

適配器模式屬於結構型模式,旨在將一個類的介面轉換成客戶端期望的另一個介面,使原本不兼容的類能夠協同工作。核心角色:

  • Target(目標介面):客戶端期望的介面。
  • Adaptee(被適配者):現有的、介面不兼容的類。
  • Adapter(適配器):實現 Target,內部持有 Adaptee 引用,將請求委派給 Adaptee。

兩種實現方式

1. 類適配器(繼承)

適配器繼承 Adaptee 並實現 Target。Java 單繼承限制,適用於 Adaptee 為類且無需多重繼承的場景。

public class SquarePeg { public void insert(String s) { ... } }
public class RoundPeg { public void insertIntoHole(String s) { ... } }

// 適配器繼承 SquarePeg,組合 RoundPeg
public class PegAdapter extends SquarePeg {
    private RoundPeg roundPeg;
    public PegAdapter(RoundPeg peg) { this.roundPeg = peg; }
    @Override public void insert(String str) { roundPeg.insertIntoHole(str); }
}

2. 物件適配器(組合/委派)—— 推薦

適配器實現 Target,內部持有 Adaptee 實例。更靈活,可適配 Adaptee 及其子類,符合「組合優於繼承」原則。

public class PegAdapter implements SquarePeg {
    private RoundPeg roundPeg;
    public PegAdapter(RoundPeg peg) { this.roundPeg = peg; }
    public void insert(String str) { roundPeg.insertIntoHole(str); }
}

3. 雙向適配器

若需同時適配兩個介面,可實現兩個介口(Java 不支援多重繼承類,但可實現多介面):

public class TwoWayAdapter implements ISquarePeg, IRoundPeg {
    private SquarePeg squarePeg;
    private RoundPeg roundPeg;
    // 兩個構造器分別注入
    public void insert(String s) { roundPeg.insertIntoHole(s); }
    public void insertIntoHole(String s) { squarePeg.insert(s); }
}

可插拔適配器

利用反射動態發現類的公共方法,實現運行時適配器選擇,進一步解耦。

實戰場景

  • 第三方庫介面不匹配,且無法修改源碼。
  • 舊系統遷移,新介面需兼容舊實現。
  • 統一異構系統的數據訪問介面(如 JDBC 驅動適配不同資料庫)。

核心優勢

  • 解耦:客戶端不依賴具體 Adaptee 實現。
  • 復用:讓現有類在新介面下繼續服役。
  • 靈活:可隨時替換適配器實現,支援多種適配策略。

下次遇到「介面不兼容」時,先想適配器,別急著改源碼!

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved