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

從集合框架演進看 Java 適配器模式實戰

     編輯:Java 相關知識

背景:集合介面的斷層

  • JDK 1.1 (Historical):Vector, Hashtable 等透過 Enumeration 遍歷
  • JDK 1.2+ (Collections Framework):ArrayList, HashMap 等透過 Iterator 遍歷

舊代碼若直接在新編譯器下編譯會報錯:List 無 elements() 方法。遵循「開閉原則」,不修改舊邏輯前提下複用新集合,需引入適配器模式。

適配器模式實作

目標:將 Iterator 適配為 Enumeration

package net.blogjava.lzqdiy;

import java.util.Enumeration;
import java.util.Iterator;

public class NewEnumeration implements Enumeration {
    private final Iterator iterator;

    public NewEnumeration(Iterator iterator) {
        this.iterator = iterator;
    }

    @Override
    public boolean hasMoreElements() {
        return iterator.hasNext();
    }

    @Override
    public Object nextElement() {
        return iterator.next();
    }

    // 測試主程式
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("a"); list.add("b"); list.add("C");

        // 使用舊式 Enumeration 遍歷新集合
        for (Enumeration e = new NewEnumeration(list.iterator()); e.hasMoreElements(); ) {
            System.out.println(e.nextElement());
        }
    }
}

設計精髓解析

角色類別/介面說明
Target (目標介面)Enumeration舊代碼期望的介面
Adaptee (被適配者)Iterator新集合提供的介面
Adapter (適配器)NewEnumeration實現 Target,組合 Adaptee,轉發請求
Client (客戶端)main()以 Target 介面使用 Adapter

進階應用場景

  • 第三方庫整合:統一不同供應商的迭代介面
  • 遺留系統遷移:漸進式替換底層集合實現,上層業務邏輯零修改
  • API 版本兼容:同一代碼庫支援新舊版本 SDK

現代替代方案

Java 8+ 可使用 Collections.list(enumeration) 或 Stream API 轉換,但適配器模式在「介面不兼容、不可修改源碼」場景下仍是經典解法。

總結

集合框架從 Enumeration 到 Iterator 的演進,是適配器模式的教科書級應用場景。NewEnumeration 以組合取代繼承,將介面轉換邏輯封裝隔離,完美詮釋「開閉原則」與「依賴倒置原則」。

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