定义

迭代器模式(也叫作游标模式): 提供一种方法顺序访问一个聚合对象中的各个元素,而又不用暴露该对象的内部表示。

当前高级面向对象语言基本上默认包含这个模式。

类图

迭代子模式涉及到以下几个角色:

适用场景

  1. 屏蔽复杂性,提供统一接口
  2. 安全性,隐藏实现细节
  3. 减少重复代码
  4. 为对象提供不同的迭代方法
  5. 希望代码能够遍历不同的甚至是无法预知的数据结构

优缺点

优点

缺点

参考代码

Java内置实现

聚集(Aggregate)角色

public interface Iterable<T> {

    // 创建一个迭代器
Iterator<T> iterator();

    default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }

    // 可拆分迭代器 <https://blog.csdn.net/sl1992/article/details/100149187>
    default Spliterator<T> spliterator() {
        return Spliterators.spliteratorUnknownSize(iterator(), 0);
    }
}

迭代子(Iterator)角色

public interface Iterator<E> {
boolean hasNext();

E next();

    default void remove() {
        throw new UnsupportedOperationException("remove");
    }

    // 迭代剩下的元素
    default void forEachRemaining(Consumer<? super E> action) {
        Objects.requireNonNull(action);
        while (hasNext())
            action.accept(next());
    }

}

for-each增强循环