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

Java 設計模式:適配器模式深度解析(類適配器 vs 物件適配器)

     編輯:Java 相關知識

前言

適配器模式將一個類的介面轉換成客戶期望的另一個介面,讓原本不相容的類能夠協同工作。本文詳細對比兩種實作形式:類適配器(繼承)與 物件適配器(組合),並提供完整代碼示例。

模式結構對比

維度類適配器物件適配器
核心關係繼承 Source 類組合 Source 物件
實作介面implements Targetimplements Target
適配範圍單一 Source 類可適配多個 Source 物件
靈活性較低(靜態綁定)較高(動態組合)
覆寫行為可覆寫 Source 方法僅能委派,難以覆寫

場景設定

舊系統:所有坐騎只能 run()(跑)
新需求:坐騎需同時支援 run() 與 fly()(飛)
目標介面:ITarget { run(); fly(); }

類適配器實作

// 來源類:舊系統坐騎
public class Sources {
    public void run() { System.out.println("run"); }
}

// 目標介面:新需求
public interface ITarget {
    void run();
    void fly();
}

// 類適配器:繼承 Sources,實作 ITarget
public class Adapter extends Sources implements ITarget {
    @Override
    public void fly() { System.out.println("fly"); }
    // run() 直接繼承自 Sources
}

適用場景:單一來源類、需覆寫部分方法、編譯期確定適配關係。

物件適配器實作

// 來源物件:可能有多種動物
public class Animal {
    public void run() { System.out.println("run"); }
}

// 目標介面同前

// 物件適配器:組合 Animal,實作 ITarget
public class Adapter implements ITarget {
    private Animal animal; // 可擴展為多個來源物件
    
    public Adapter(Animal animal) { this.animal = animal; }
    
    @Override
    public void fly() { System.out.println("fly"); } // 新增行為
    
    @Override
    public void run() { animal.run(); } // 委派來源物件
}

適用場景:多來源類、運行期動態切換來源、不想建立繼承關係。

進階:雙向適配器

public class TwoWayAdapter implements ITarget, Sources {
    private Animal animal;
    private Sources source;
    
    public TwoWayAdapter(Animal a) { this.animal = a; }
    public TwoWayAdapter(Sources s) { this.source = s; }
    
    @Override public void run() { 
        if (animal != null) animal.run(); 
        else if (source != null) source.run(); 
    }
    @Override public void fly() { System.out.println("fly"); }
}

實戰應用場景

  • 第三方庫整合:將外部 API 適配為內部介面
  • 舊系統遷移:漸進式替換舊模組,適配器作為過渡層
  • 多格式資料處理:XML/JSON/CSV 統一適配為同一資料介面
  • 跨平台 UI:Swing/JavaFX/Android 統一適配渲染介面

最佳實踐建議

  1. 優先選擇物件適配器:組合優於繼承,符合開閉原則
  2. 介面隔離:目標介面應盡量精簡,避免「胖介面」
  3. 命名規範:類名以 Adapter 結尾,如 JdbcTemplateAdapter
  4. 文檔說明:註釋說明適配目的、來源與目標差異

總結

適配器模式是結構型模式中最實用的模式之一。類適配器透過繼承實現簡單但耦合度高;物件適配器透過組合實現靈活,符合「組合優於繼承」原則。現代開發中,物件適配器配合依賴注入框架(如 Spring)使用更為普遍,能夠優雅解決介面不兼容問題。

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