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

Java 設計模式:Iterator 迭代器模式詳解與實作

     編輯:Java 相關知識

前言

在 Java 開發中,Iterator(迭代器)模式 是一種行為型設計模式,它提供了一種統一的方式來遍歷集合中的元素,而無需暴露集合的內部結構。本文將透過完整的程式碼範例,從介面定義到實際應用,深入解析 Iterator 模式的核心概念與實作細節。

核心介面設計

1. Collection 容器介面

首先定義一個頂層的集合介面,規範基本操作:新增元素、取得大小、以及建立迭代器。

package com.example.iterator;

public interface Collection {
    void add(Object o);
    int size();
    Iterator iterator();
}

2. Iterator 迭代器介面

迭代器介面只需兩個核心方法:hasNext() 判斷是否有下一個元素,next() 取得下一個元素。

package com.example.iterator;

public interface Iterator {
    Object next();
    boolean hasNext();
}

具體實作:ArrayList

我們實作一個簡易的動態陣列 ArrayList,內部維護一個 Object[] 並自動擴容。關鍵在於 iterator() 方法回傳一個內部類 ArrayListIterator,封裝遍歷狀態(currentIndex)。

package com.example.iterator;

public class ArrayList implements Collection {
    private Object[] objects = new Object[10];
    private int index = 0;

    @Override
    public void add(Object o) {
        if (index == objects.length) {
            Object[] newObjects = new Object[objects.length * 2];
            System.arraycopy(objects, 0, newObjects, 0, objects.length);
            objects = newObjects;
        }
        objects[index++] = o;
    }

    @Override
    public int size() {
        return index;
    }

    @Override
    public Iterator iterator() {
        return new ArrayListIterator();
    }

    /** 內部迭代器實作 */
    private class ArrayListIterator implements Iterator {
        private int currentIndex = 0;

        @Override
        public boolean hasNext() {
            return currentIndex < index;
        }

        @Override
        public Object next() {
            return objects[currentIndex++];
        }
    }
}

測試驗證

客戶端程式只需依賴介面,即可透過多態機制遍歷集合,完全不需知道底層是陣列還是鏈表。

package com.example.iterator;

public class TestMain {
    public static void main(String[] args) {
        Collection c = new ArrayList();
        for (int i = 0; i < 15; i++) {
            c.add("string " + i);
        }
        System.out.println("集合大小:" + c.size());

        Iterator it = c.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

執行結果

集合大小:15
string 0
string 1
...
string 14

設計模式精髓

此例完美展示了面向介面程式設計與多態的威力:

  • 客戶端針對 Collection 和 Iterator 介面程式設計
  • 具體集合類別(如 ArrayList)封裝內部資料結構
  • 迭代器將「遍歷行為」從集合中分離,符合單一職責原則
  • 未來可輕易替換為 LinkedList、HashSet 等實作,客戶端代碼零修改

這就是 Iterator 模式的核心價值:提供統一的遍歷介面,屏蔽底層資料結構差異。

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