设计模式——迭代器模式

当我们说“集合(collection)”的时候,我们指的是一群对象。其存储方式是各式各样的数据结构,如列表、数组、散列表,无论用什么方式存储,一律可以视为集合。

迭代器模式定义

提供一种方法顺序访问一个集合对象的各个元素,而又不暴露其内部的表示。

这个模式给我们提供了一种方法,可以顺序访问一个集合对象中的元素,而又不用知道内部是如何表示的。

类图:
设计模式——迭代器模式
Iterator是所有迭代器都必须实现的接口,Java中也提供了Iterator接口,如果不想用Java提供的,自己设计一个也是可以的。在这里我自己设计了一个迭代器接口,里面有方法hasMore()、next()。
ConcreteIterator是具体的迭代器,负责管理目前遍历的位置。
Aggregate有一个共同的接口供所有的集合使用,这对客户代码是很方便的,将客户代码从集合对象的实现中解耦了。
ConcreteAggregate这是一个具体的持有一个对象的集合,并实现一个方法,利用此方法返回集合的迭代器。

像ArrayList、Vector、LinkedList、Stack、PriorityQueue这些类都实现了java.util.Collection接口。而每个Collection都知道如何创建自己的iterator。如ArrayList上的iterator()方法就可以返回一个具体的Iterator,而你根本不需要去知道它到底做了什么,只要使用Iterator接口就可以了。

使用迭代器可以让你很方便地遍历对象。这一点我觉得没有太多人有同感,因为java在很多集合类上都内置实现了迭代器设计模式,大家用得很多,没有对比过没有迭代器的情况,自然也没有什么感觉了。下面这个demo从头带你走过没有内置迭代器的日子,谢谢。

迭代器设计模式的demo已上传GitHub,欢迎下载学习