迭代器模式(也叫作游标模式): 提供一种方法顺序访问一个聚合对象中的各个元素,而又不用暴露该对象的内部表示。
当前高级面向对象语言基本上默认包含这个模式。
迭代子模式涉及到以下几个角色:
优点
缺点
聚集(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增强循环