迭代器模式
目的
提供一种顺序访问聚合对象元素的方法,并且不暴露聚合对象的内部表示。
类图
角色
- Aggregate 聚合类,其中 createIterator() 方法可以产生一个 Iterator;
- ConcreteAggregate 具体聚合类,其中 createIterator() 方法可以产生一个 Iterator;
- Iterator 迭代器,主要定义了 hasNext() 和 next() 方法。
- ConcreteIterator 迭代器,主要定义了 hasNext() 和 next() 方法。
- Client 组合了 Aggregate,为了迭代遍历 Aggregate,也需要组合 Iterator。

实现
聚合类
public interface Aggregate {
Iterator createIterator();
}
具体聚合类
public class ConcreteAggregate implements Aggregate {
private Integer[] items;
public ConcreteAggregate() {
items = new Integer[10];
for (int i = 0; i < items.length; i++) {
items[i] = i;
}
}
@Override
public Iterator createIterator() {
return new ConcreteIterator<Integer>(items);
}
}
迭代器
public interface Iterator<Item> {
Item next();
boolean hasNext();
}
具体迭代器
public class ConcreteIterator<Item> implements Iterator {
private Item[] items;
private int position = 0;
public ConcreteIterator(Item[] items) {
this.items = items;
}
@Override
public Object next() {
return items[position++];
}
@Override
public boolean hasNext() {
return position < items.length;
}
}
调用者
public class Client {
public static void main(String[] args) {
Aggregate aggregate = new ConcreteAggregate();
Iterator<Integer> iterator = aggregate.createIterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
优缺点
优点
- 它支持以不同的方式遍历一个聚合对象。
- 迭代器简化了聚合类。
- 在同一个聚合上可以有多个遍历。 4、在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。
缺点
- 由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。
使用场景
- 访问一个聚合对象的内容而无须暴露它的内部表示。
- 需要为聚合对象提供多种遍历方式。
- 为遍历不同的聚合结构提供一个统一的接口。
迭代器模式详解
本文深入解析迭代器模式,介绍其目的、类图、角色及实现方法。通过具体聚合类和迭代器类的代码示例,展示如何提供统一的遍历方式,同时保持聚合对象的内部表示不被外界访问。讨论迭代器模式的优缺点,以及在访问聚合对象内容而不暴露内部表示时的应用场景。

被折叠的 条评论
为什么被折叠?



