Java 迭代器模式(Iterator Pattern)詳解
🧠 什么是迭代器模式?
迭代器模式是一種行為型設計模式,它提供一種方法順序訪問一個聚合對象中的各個元素,而不暴露該對象的內部表示。
🎯 使用場景
- 遍歷集合對象(如 List、Set、Map)
- 需要統一不同容器的遍歷方式
- 不希望暴露集合內部結構
🏗? 模式結構
- Iterator(迭代器接口):定義訪問和遍歷元素的接口
- ConcreteIterator(具體迭代器):實現迭代器接口,記錄遍歷狀態
- Aggregate(聚合接口):創建迭代器對象
- ConcreteAggregate(具體聚合類):實現聚合接口,返回具體迭代器
? 示例:自定義聚合對象
迭代器接口
public interface Iterator<E> {boolean hasNext();E next();
}
聚合接口
public interface Aggregate<E> {Iterator<E> createIterator();
}
具體聚合類
import java.util.ArrayList;
import java.util.List;public class NameRepository implements Aggregate<String> {private List<String> names = new ArrayList<>();public NameRepository() {names.add("Tom");names.add("Jerry");names.add("Alice");}@Overridepublic Iterator<String> createIterator() {return new NameIterator();}private class NameIterator implements Iterator<String> {private int index = 0;@Overridepublic boolean hasNext() {return index < names.size();}@Overridepublic String next() {return hasNext() ? names.get(index++) : null;}}
}
客戶端使用
public class Main {public static void main(String[] args) {NameRepository repo = new NameRepository();Iterator<String> iterator = repo.createIterator();while (iterator.hasNext()) {System.out.println("Name: " + iterator.next());}}
}
? 優點
- 封裝集合遍歷細節
- 支持多種遍歷方式
- 遵循單一職責原則(遍歷與集合解耦)
?? 缺點
- 每種集合都需要實現迭代器,增加代碼量
- 不支持逆向遍歷(需擴展接口)
🧩 使用建議
Java 中已有內置迭代器(如 Iterator<T>
接口),但理解其設計思想有助于掌握設計模式的解耦思想與開放封閉原則。