一、定义
提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。
二、角色
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
下的实现类就可以完美地解决问题。
查看更多:设计模式分类以及六大设计原则