迭代器模式学习和理解

来源:互联网 发布:淘宝实名认证怎么弄 编辑:程序博客网 时间:2024/06/16 09:18

迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。

构成:

(1)迭代器角色(Iterator):定义遍历元素所需要的方法,一般来说会有这么三个方法:取得下一个元素的方法next(),判断是否遍历结束的方法hasNext()),移出当前对象的方法remove(),

(2)具体迭代器角色(Concrete Iterator):实现迭代器接口中定义的方法,完成集合的迭代。

(3)容器角色(Aggregate):  一般是一个接口,提供一个iterator()方法,例如java中的Collection接口,List接口,Set接口等

(4)具体容器角色(ConcreteAggregate):就是抽象容器的具体实现类,比如List接口的有序列表实现ArrayList,List接口的链表实现LinkList,Set接口的哈希列表的实现HashSet等。

理解:其实就是为不同的容器提供一种统一的遍历方法。首先必须注意的是,需要面向接口编程。

举个例子,假如有两种方式实现列表,一种是数组形式,一种是链表形式。首先定义一个List的接口Collection,让两种方式所使用的类都继承Collection,接口中有列表的add()方法,size()方法等。那遍历方法呢?两种方法的具体实现不一样啊,于是我们把遍历相关的方法抽象出来一个接口叫Iterator,包括hasNext()、next()、remove()等。在以上两种方式的类中分别定义一个返回Iterator类型的方法,此时也是面向接口编程的体现,两种类分别实现此方法。这样在用户使用不同实现的时候,调用的接口名称一样。

思考:为什么要费尽周折搞一个Iterator呢,还不如把Iterator中的方法直接放到Collection中呢?其实啊,也考虑了单一性原则,不能所有的功能都放在一个接口中啊,要不然一个接口的东西太多,知道的越多就会死的越快。不同的功能接口还是需要封装的。