设计模式-迭代器模式(19)

定义

迭代器模式(Iterator Pattern)是使用率最高的几个模式之一,被广泛地应用到Java的API中。例如:Java的集合(Collection)框架中,就广泛使用迭代器来遍历集合中元素。

英文原话:Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.

翻译:提供一种方法,访问一个容器对象中的各个元素,而又不暴露该对象的内部细节。

迭代器是为容器服务的,容器是指用来容纳其他对象的对象,例如:Collection集合类型、Set类型等。迭代器模式便于遍历和访问容器中的元素。

角色:

抽象迭代器(Iterator)角色:该角色负责定义访问和遍历元素的接口。

具体迭代器(Concrete Iterator)角色:该角色实现Iterator接口,完成容器元素的遍历。

抽象聚集(Aggregate)角色:该角色提供创建迭代器角色的接口。

具体聚集(Concrete Aggregate)角色:该角色实现抽象聚集接口,创建出容纳迭代器的对象。

 

优点

  • 迭代器模式简化了访问容器元素的操作,具备统一的遍历接口。
  • 封装遍历算法,使算法独立于聚集角色。客户无需知道聚集对象的类型,即使聚集对象的类型发生变化,也不会影响遍历过程。

缺点

  • 迭代器模式给使用者一种序列化的错觉,而产生错误。
  • 迭代器的元素都是Object类型,没有类型特征(JDK1.5之后引入泛型可以解决此问题)。

应用场景

迭代器模式现在被广泛的应用甚至已经成为一个最基础的工具。有些人建议将迭代器从23中模式删除,器原因就是迭代器模式太普通了,它已经融入到各种语言和各工具中。在Java语言中,从JDK1.2版本开始,就增加了java.util.Iterator接口,并将Iterator应用到各个聚集类(Collection)中,如ArrayList、Vector、Stack、HashSet等集合类都实现了iterator()方法,返回一个迭代器Iterator,便于对集合中的元素进行遍历。也正因为Java已经将迭代器模式融入最基本的API中,程序员在项目中无需再独立的写迭代器,直接使用即可。

猜你喜欢

转载自www.cnblogs.com/aeolian/p/8909994.html