目录
定义
迭代器模式将集合对象的遍历行为抽象为独立的迭代器对象,通过统一的接口(如 hasNext()、next())实现元素访问,使客户端无需关心底层数据结构。本质是分离集合的迭代逻辑与业务逻辑,实现遍历算法与数据结构的解耦,提升代码复用性和扩展性。
结构

适用场景
1)隐藏复杂数据结构。当集合内部采用树、图等复杂结构时,迭代器封装遍历细节,简化客户端调用。
2)统一遍历接口。需对多种集合(数组、链表、字典)执行相同操作时,提供一致的遍历方式。
3)支持多种遍历方式。如正序、倒序、过滤遍历等,无需修改集合代码。
4)跨集合操作。需同时遍历多个独立集合时(如合并查询),迭代器提供统一入口。
使用示例
/**
* 统一迭代器接口
* @param <T>
*/
public interface Iterator<T> {
boolean hasNext();
T next();
}
/**
* 统一集合接口
* @param <T>
*/
public interface Container<T> {
Iterator<T> createIterator();
}
/**
* 数组集合实现
*/
public class ArrayCollection implements Container<String> {
private String[] items;
public ArrayCollection(String[] items) {
this.items = items;
}
@Override
public Iterator<String> createIterator() {
return new ArrayIterator();
}
private class ArrayIterator implements Iterator<String> {
private int index = 0;
@Override
public boolean hasNext() {
return index < items.length;
}
@Override
public String next() {
return items[index++];
}
}
}
/**
* 链表集合实现
*/
public class ListCollection implements Container<String> {
private List<String> items;
public ListCollection(List<String> items) {
this.items = items;
}
@Override
public Iterator<String> createIterator() {
return new ListIterator();
}
private class ListIterator implements Iterator<String> {
private int index = 0;
@Override
public boolean hasNext() {
return index < items.size();
}
@Override
public String next() {
return items.get(index++);
}
}
}
测试
import java.util.Arrays;
public class Client {
public static void printAll(Iterator<String> iterator) {
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
}
public static void main(String[] args) {
String[] firstAggregate = new String[]{"语文", "数学", "物理", "化学", "英语"};
Container<String> array = new ArrayCollection(firstAggregate);
Container<String> list = new ListCollection(Arrays.asList("毛泽东", "秦始皇", "汉武帝", "隋文帝", "朱元璋", "刘邦", "唐太宗"));
System.out.println("数组集合遍历:");
printAll(array.createIterator());
System.out.println("\n链表集合遍历:");
printAll(list.createIterator());
}
}