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

Java 適配器模式雙實現:類適配器(繼承)vs 對象適配器(組合)完整對比

     編輯:Java 相關知識

適配器模式將不兼容的介面轉換為客戶期望的介面,使原本無法協作的類能夠協同工作。本文通過「電腦 USB 接口適配圓口鍵盤」經典案例,完整展示類適配器(多重繼承/實現)與對象適配器(組合委派)兩種實現,並給出選型建議。

場景描述

  • 目標介面:USB(含 receive() 方法)
  • 被適配類:KeyBoard(含 input() 方法,圓口)
  • 客戶端:Computer 僅支援 USB 介面

實現一:類適配器(繼承 KeyBoard + 實現 USB)

// 目標介面
interface USB { void receive(); }

// 被適配類
class KeyBoard { public void input() { System.out.println("鍵盤輸出數據"); } }

// 類適配器:繼承 KeyBoard、實現 USB
class USBAdapter extends KeyBoard implements USB {
    public void receive() {
        System.out.println("USB適配器:讓圓口鍵盤接入USB電腦");
        super.input(); // 直接復用父類方法
    }
}

// 客戶端
public class Computer {
    public void show(USB usb) {
        usb.receive();
        System.out.println("電腦顯示輸出數據");
    }
    public static void main(String[] args) {
        new Computer().show(new USBAdapter());
    }
}

實現二:對象適配器(組合 KeyBoard + 實現 USB)

// 對象適配器:持有 KeyBoard 引用
class USBAdapter implements USB {
    private KeyBoard keyboard;
    public USBAdapter(KeyBoard keyboard) { this.keyboard = keyboard; }
    public void receive() {
        System.out.println("USB適配器:讓圓口鍵盤接入USB電腦");
        keyboard.input(); // 委派給被適配對象
    }
}

// 客戶端調用變化
public static void main(String[] args) {
    KeyBoard kb = new KeyBoard();
    USB usb = new USBAdapter(kb); // 注入具體鍵盤實例
    new Computer().show(usb);
}

深度對比

維度類適配器對象適配器
核心機制繼承(extends)+ 實現(implements)組合(持有引用)+ 委派
適配範圍只能適配單一具體類(Java 單繼承)可適配該類及其所有子類
覆寫靈活性可覆寫被適配類方法無法覆寫,需子類化後再適配
耦合度較高(繼承關係)較低(介面依賴)
對象適配器優勢✓ 符合「組合優於繼承」
✓ 一個適配器服務多種鍵盤子類
✓ 不破壞封裝性
✓ 易於測試

選型建議

優先使用對象適配器。除非必須覆寫被適配類方法,或被適配類為 final 無法繼承時,才考慮類適配器(或結合代理模式)。

企業級應用場景

  • 流轉換:InputStreamReader 適配 InputStream → Reader(字節流轉字符流)
  • 第三方庫整合:統一異構 SDK 介面為內部標準介面
  • 舊系統遷移:新系統定義新介面,適配器包裝舊實現
  • Spring MVC:HandlerAdapter 適配各種 Controller 介面

擴展:雙向適配器

若需雙向轉換,可實現雙重介面:

class TwoWayAdapter implements USB, PS2 {
    private KeyBoard kb;
    private Mouse mouse;
    // 同時實現 USB.receive() 和 PS2.connect()
}

適配器模式是系統集成、遷移、解耦的核心利器,靈活運用組合式適配器能顯著降低架構耦合度。

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