迭代器模式

模式描述

提供一种方法顺序访问容器中的各个元素,又不需要暴漏对象的内部表示。

优点

  1. 支持以不同方式遍历容器;
  2. 对一个容器可以创建多个迭代器,互不影响;

缺点

  1. 遍历的同时,不能对容器进行 add 或者 remove;

应用场景

  1. 遍历
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 类

客户端。

数据流

  1. ConcreteIterator 跟踪容器对象,并能够算出遍历的后继对象;

相关模式

  • 组合模式:迭代器常被应用到组合的递归结构上;
  • 工厂方法:多迭代器使用工厂方法来实例化;
  • 备忘录模式:迭代器可使用备忘录来捕获一个迭代的状态。

补充

  • 在进行迭代器遍历时,如果容器进行了 add 或者 remove,则可以使用报错的方式;

示例代码

golang

java