迭代器模式(Iterator Pattern)
迭代器模式(Iterator Pattern)是一种行为设计模式,用于在不暴露对象内部表示的情况下顺序访问集合对象的元素。它提供了一种统一的方式来遍历集合元素,而无需了解集合的底层实现。
核心思想是分离集合对象的遍历行为,将遍历逻辑封装在迭代器中,从而为不同集合提供一致的遍历接口。
主要组成部分
-
Iterator(迭代器接口)
定义访问和遍历元素的接口,例如
hasNext()
和next()
方法。 -
Concrete Iterator(具体迭代器)
实现
Iterator
接口,负责具体集合的遍历逻辑。 -
Aggregate(聚合接口)
定义创建迭代器对象的方法,如
createIterator()
。 -
Concrete Aggregate(具体聚合类)
实现聚合接口,返回具体的迭代器实例,并存储集合的元素。
案例实现
一个简单的迭代器模式实现,使用聚合类为自定义集合。为了简化代码,聚合类本质是List集合。
案例类图

聚合接口
java
public interface Aggregate<T> {
Iterator<T> createIterator();
}
具体聚合类
为了简化代码,直接使用List 集合
java
public class ConcreteAggregate<T> implements Aggregate<T> {
private final List<T> items = new ArrayList<>();
public void add(T item) {
items.add(item);
}
@Override
public Iterator<T> createIterator() {
return new ConcreteIterator<>(items);
}
}
迭代器接口
java
// 迭代器接口
public interface Iterator<T> {
boolean hasNext();
T next();
}
具体迭代器类
List 集合的迭代器简易实现
java
public class ConcreteIterator<T> implements Iterator<T> {
private final List<T> items;
private int position = 0;
public ConcreteIterator(List<T> items) {
this.items = items;
}
@Override
public boolean hasNext() {
return position < items.size();
}
@Override
public T next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
return items.get(position++);
}
}
测试代码
java
public class IteratorDemo {
public static void main(String[] args) {
ConcreteAggregate<String> aggregate = new ConcreteAggregate<>();
aggregate.add("Item 1");
aggregate.add("Item 2");
aggregate.add("Item 3");
System.out.println("遍历集合元素:");
Iterator<String> iterator = aggregate.createIterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
测试结果
遍历集合元素:
Item 1
Item 2
Item 3
优缺点和使用场景
优点
- 支持多种遍历方式:可以实现不同的迭代逻辑,例如正序、倒序、条件过滤等;
- 隐藏集合的内部实现:迭代器通过抽象集合的底层逻辑,实现集合元素的访问,而用户无需关心集合的底层结构;
- 提供统一接口:方便替换或扩展集合类型。
缺点
- 类的数量增加:迭代器服务于特定的集合,需要为每个集合实现具体的迭代器;
- 可能影响性能:为每次遍历创建新的迭代器对象,增加了开销。
使用场景
-
需要访问一个集合对象的内容,但不希望暴露其内部表示
-
需要支持多种方式遍历集合
-
需要为不同集合类型提供一致的遍历接口
Java 标准库中的迭代器模式
在 Java 中,java.util.Iterator
和 java.util.Enumeration
是迭代器模式的典型实现,用于遍历集合类(如List
、Set
和Map
)。
例如:
java
List<String> list = Arrays.asList("A", "B", "C");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
总结
迭代器模式是一种行为设计模式,其核心在于通过提供一个迭代器对象,将聚合对象(如集合)的遍历行为与其内部表示分离,使得客户端能够以一致的方式访问聚合对象中的元素,而无需了解其底层实现,支持多种遍历方式且不影响集合对象的封装性。

需要查看往期设计模式文章的,可以在个人主页中或者文章开头的集合中查看,可关注我,持续更新中。。。