行为型-迭代器模式
2026/1/15大约 2 分钟Java设计模式行为型模式迭代器模式Java设计模式面向对象架构设计最佳实践代码优化
概述
迭代器模式(Iterator Pattern)提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
适用场景
- 访问一个聚合对象的内容而无需暴露它的内部表示
- 支持对聚合对象的多种遍历
- 为遍历不同的聚合结构提供一个统一的接口
角色组成
- Iterator(抽象迭代器):定义访问和遍历元素的接口
- ConcreteIterator(具体迭代器):实现迭代器接口
- Aggregate(抽象聚合):定义创建迭代器对象的接口
- ConcreteAggregate(具体聚合):实现创建迭代器的接口
代码实现
1. 抽象迭代器
public interface Iterator<T> {
boolean hasNext();
T next();
}2. 抽象聚合
public interface Aggregate<T> {
Iterator<T> createIterator();
void add(T item);
int size();
}3. 具体聚合
public class BookShelf implements Aggregate<String> {
private List<String> books = new ArrayList<>();
@Override
public void add(String book) {
books.add(book);
}
@Override
public int size() {
return books.size();
}
public String getBookAt(int index) {
return books.get(index);
}
@Override
public Iterator<String> createIterator() {
return new BookShelfIterator(this);
}
}4. 具体迭代器
public class BookShelfIterator implements Iterator<String> {
private BookShelf bookShelf;
private int index;
public BookShelfIterator(BookShelf bookShelf) {
this.bookShelf = bookShelf;
this.index = 0;
}
@Override
public boolean hasNext() {
return index < bookShelf.size();
}
@Override
public String next() {
return bookShelf.getBookAt(index++);
}
}5. 客户端
public class Client {
public static void main(String[] args) {
BookShelf bookShelf = new BookShelf();
bookShelf.add("Java编程思想");
bookShelf.add("设计模式");
bookShelf.add("重构");
Iterator<String> iterator = bookShelf.createIterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}# 输出
Java编程思想
设计模式
重构类图
JDK 中的应用
// java.util.Iterator
List<String> list = Arrays.asList("A", "B", "C");
Iterator<String> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
// 增强 for 循环(语法糖)
for (String s : list) {
System.out.println(s);
}优缺点
优点:
- 支持以不同方式遍历一个聚合对象
- 简化了聚合类
- 在同一个聚合上可以有多个遍历
缺点:
- 增加新的聚合类需要对应增加新的迭代器类
- 类的个数成对增加
