一、定义
提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。
二、角色
1. Iterator
抽象迭代器
抽象迭代器负责定义访问和遍历元素的接口,而且基本上是有固定的3个方法:first()
获得第一个元素,next()
访问下一个元素,isDone()
是否已经访问到底部(Java 叫做 hasNext()
方法)。
public interface Iterator<E> { // 是否已经遍历到尾部 boolean hasNext(); // 遍历到下一个元素 E next(); // 删除当前指向的元素 void remove(); }
2. Collection
集合
提供创建具体迭代器角色的接口,在 Java 中是 iterator()
方法。
public interface Collection<E> extends Iterable<E> { // 容器大小 int size(); // 是否为空 boolean isEmpty(); // 是否包含某个元素 boolean contains(Object o); // 返回迭代器 Iterator<E> iterator(); // 添加一个元素 boolean add(E e); // 移除一个元素 boolean remove(Object o); }
- 注意:
开发系统时,迭代器的删除方法应该完成两个逻辑:一是删除当前元素,二是当前游标指向下一个元素。
三、应用
迭代器现在应用得越来越广泛了,甚至已经成为一个最基础的工具,它已经融入到各个语言和工具中了。
基本现在所有的高级语言都有类似 Iterator
这个接口或者实现,Java 已经把迭代器给我们准备好了,我们再去写迭代器,就有点多余了。所以呀,这个迭代器模式也有点没落了,基本上很少有项目再独立写迭代器了,直接使用 Collection
下的实现类就可以完美地解决问题。
查看更多:设计模式分类以及六大设计原则