迭代器模式是数据宇宙的时空旅者,如同张衡的浑天仪——通过建立统一的遍历法则,让复杂结构的探索既保持秩序又充满可能,在软件架构中实现控制与自由的辩证统一。
一、概念解析
迭代器模式(Iterator Pattern) 提供统一方式访问聚合对象元素,无需暴露内部结构。核心四要素:
- 迭代器接口:定义遍历方法(hasNext/next)
- 具体迭代器:实现特定遍历逻辑(如顺序/逆序)
- 聚合对象接口:声明创建迭代器的方法
- 客户端解耦:通过抽象接口操作,避免依赖具体集合
二、日常例子类比
图书馆书架管理:读者通过图书目录(迭代器)查找书籍,无需知晓书籍是线性排列还是树形分类,如同地铁乘客通过路线图遍历站点,不关心轨道布线。
三、Java代码实现
// 1. 迭代器接口
interface BookIterator {
boolean hasNext();
String next();
}
// 2. 具体迭代器(按书名顺序)
class NameOrderIterator implements BookIterator {
private String[] books;
private int position = 0;
public NameOrderIterator(String[] books) {
Arrays.sort(books);
this.books = books;
}
@Override
public boolean hasNext() {
return position < books.length;
}
@Override
public String next() {
return books[position++];
}
}
// 3. 聚合对象接口
interface BookCollection {
BookIterator createIterator();
}
// 4. 具体聚合对象
class Library implements BookCollection {
private String[] books = {"设计模式","Java核心","算法导论"};
@Override
public BookIterator createIterator() {
return new NameOrderIterator(books);
}
}
// 5. 客户端调用
public class Reader {
public static void main(String[] args) {
BookCollection library = new Library();
BookIterator it = library.createIterator();
while(it.hasNext()) {
System.out.println("找到书籍:" + it.next());
}
/* 输出:
找到书籍:Java核心
找到书籍:算法导论
找到书籍:设计模式 */
}
}
四、优缺点与使用场景
维度 | 说明 |
优点 | 解耦遍历逻辑与集合结构;支持多种遍历策略;符合单一职责原则 |
缺点 | 增加系统复杂度;特定场景下性能不如直接遍历 |
适用场景 | 需要多种遍历方式(树形/图形结构)、封装集合内部实现(如数据库结果集遍历) |
五、哲学思考
迭代器模式暗合宇宙运行的基本法则:
- 《周易》循环观:"周流六虚,上下无常"的遍历之道;
- 时间箭头隐喻:如同历史长河的顺流而下(顺序迭代)与溯流而上(逆向迭代);
- 分形几何启示:海岸线的遍历无论宏观微观都遵循相同模式(递归迭代器)。