Java迭代器模式
外观
迭代器模式(Iterator Pattern)是设计模式中一种行为型模式,它提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。迭代器模式将遍历逻辑从聚合对象中分离出来,使得聚合对象和迭代算法可以独立变化。
概述[编辑 | 编辑源代码]
迭代器模式的核心思想是:
- 提供统一的接口来遍历不同类型的集合(如数组、链表、树等)。
- 客户端无需关心集合的内部结构,只需通过迭代器接口访问元素。
迭代器模式包含以下主要角色:
- 迭代器接口(Iterator):定义遍历集合的通用方法(如 `hasNext()`, `next()`)。
- 具体迭代器(ConcreteIterator):实现迭代器接口,负责管理当前遍历位置。
- 聚合接口(Aggregate):定义创建迭代器的方法(如 `createIterator()`)。
- 具体聚合类(ConcreteAggregate):实现聚合接口,返回具体迭代器的实例。
代码示例[编辑 | 编辑源代码]
以下是一个简单的迭代器模式实现,模拟遍历一个字符串集合:
// 迭代器接口
interface Iterator<T> {
boolean hasNext();
T next();
}
// 聚合接口
interface Aggregate<T> {
Iterator<T> createIterator();
}
// 具体聚合类(字符串集合)
class StringCollection implements Aggregate<String> {
private String[] items;
public StringCollection(String[] items) {
this.items = items;
}
@Override
public Iterator<String> createIterator() {
return new StringIterator(items);
}
}
// 具体迭代器
class StringIterator implements Iterator<String> {
private String[] items;
private int position = 0;
public StringIterator(String[] items) {
this.items = items;
}
@Override
public boolean hasNext() {
return position < items.length;
}
@Override
public String next() {
return items[position++];
}
}
// 客户端代码
public class IteratorDemo {
public static void main(String[] args) {
String[] strings = {"Apple", "Banana", "Cherry"};
Aggregate<String> collection = new StringCollection(strings);
Iterator<String> iterator = collection.createIterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
输出:
Apple Banana Cherry
代码解析[编辑 | 编辑源代码]
1. `Iterator` 接口定义了遍历集合的基本操作。 2. `StringCollection` 是具体聚合类,通过 `createIterator()` 返回一个 `StringIterator` 实例。 3. `StringIterator` 实现了迭代逻辑,客户端通过 `hasNext()` 和 `next()` 遍历元素。
实际应用场景[编辑 | 编辑源代码]
迭代器模式在以下场景中非常有用:
- **集合类库**:Java 的 `java.util.Iterator` 是迭代器模式的经典实现,例如 `ArrayList.iterator()`。
- **数据库查询结果**:遍历数据库查询返回的记录集。
- **文件系统遍历**:递归访问目录中的文件。
Java 集合框架中的迭代器[编辑 | 编辑源代码]
Java 内置了迭代器模式的支持,例如:
List<String> list = Arrays.asList("One", "Two", "Three");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
类图[编辑 | 编辑源代码]
以下是迭代器模式的类图表示:
优缺点[编辑 | 编辑源代码]
优点:
- 单一职责原则:将遍历逻辑与集合分离。
- 开闭原则:可以新增迭代器而不修改集合代码。
- 支持并行遍历:多个迭代器可以独立遍历同一集合。
缺点:
- 对于简单集合,可能增加代码复杂度。
- 某些语言(如 Java)已内置迭代器支持,直接使用现成接口更高效。
总结[编辑 | 编辑源代码]
迭代器模式是处理集合遍历的通用解决方案,尤其适合需要隐藏集合内部结构的场景。通过标准化遍历接口,它提升了代码的灵活性和可维护性。Java 开发者应熟悉 `java.util.Iterator` 的用法,并在自定义集合时考虑实现迭代器模式。