迭代器:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部显示;如果把集合对象和对集合对象的操作放在一起,当我们想换一种方式遍历集合对象中元素时,就需要修改集合对象了,违背“单一职责原则”,而迭代器模式将数据结构和数据结构的算法分离开,两者可独立发展。
优点
- 支持多种遍历方式。比如有序列表,我们根据需要提供正序遍历、倒序遍历两种迭代器。用户只需要得到我们的迭代器,就可以对集合执行遍历操作
- 简化了聚合类。由于引入了迭代器,原有的集合对象不需要自行遍历集合元素了
- 增加新的聚合类和迭代器类很方便,两个维度上可各自独立变化
- 为不同的集合结构提供一个统一的接口,从而支持同样的算法在不同的集合结构上操作
缺点
- 迭代器模式将存储数据和遍历数据的职责分离增加新的集合对象时需要增加对应的迭代器类,类的个数成对增加,在一定程度上增加系统复杂度
使用场景
- 访问一个聚合对象内容而无须暴露它的内部显示
- 需要为聚合对象提供多种遍历方式
- 为遍历不同的聚合结构提供一个统一的接口
interface Iterator extends Traversable {
/* 方法 */
public current(): mixed // 获取迭代器当前值
public key(): mixed // 获取迭代器当前键
public next(): void // 将迭代器移动到下一个位置
public rewind(): void // 将迭代器重置,重头开始
public valid(): bool // 检查当前位置是否有效
}