迭代器模式
模式描述
提供一种方法顺序访问容器中的各个元素,又不需要暴漏对象的内部表示。
优点
- 支持以不同方式遍历容器;
- 对一个容器可以创建多个迭代器,互不影响;
缺点
- 遍历的同时,不能对容器进行 add 或者 remove;
应用场景
- 遍历
DATE | CHANGELOG |
---|
UML 类图
classDiagram
class Iterator {
hasNext() bool
next() Object
}
class ConcreteIterator {
hasNext() bool
next() Object
}
Iterator <|.. ConcreteIterator
class Aggregate {
iterator() Iterator
}
class ConcreteAggregate {
iterator() Iterator
}
Aggregate <|.. ConcreteAggregate
ConcreteAggregate o.. ConcreteIterator
ConcreteIterator <-- ConcreteAggregate
Aggregate <-- Client
参与者
Iterator
- 定义迭代器访问和遍历的接口;
ConcreteIterator
- Iterator 的实现;
Aggregate
- 聚合相应迭代器的接口;
ConcreteAggregate
- Aggregate 的实现;
- 返回具体的 ConcreteAggregate 的实例;
Client 类
客户端。
数据流
- ConcreteIterator 跟踪容器对象,并能够算出遍历的后继对象;
相关模式
- 组合模式:迭代器常被应用到组合的递归结构上;
- 工厂方法:多迭代器使用工厂方法来实例化;
- 备忘录模式:迭代器可使用备忘录来捕获一个迭代的状态。
补充
- 在进行迭代器遍历时,如果容器进行了 add 或者 remove,则可以使用报错的方式;