代码改变世界

迭代器模式

2011-07-25 16:43  卫佳  阅读(205)  评论(0编辑  收藏  举报


迭代这个名词对于熟悉Java 的人来说绝对不陌生。我们常常使用JDK 提供的迭代接口 

进行java collection 的遍历: 

     Iterator it = list.iterator(); 

     while(it.hasNext()){ 

           //using  “it.next();”Cheap Reading glasses

     } 

     而这就是关于迭代器模式应用很好的例子。 

二、 定义与结构 

     迭代器(Iterator)模式,又叫做游标(Cursor)模式。GOF 给出的定义为:提供一种 

方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。 

     从定义可见,迭代器模式是为容器而生。很明显,对容器对象的访问必然涉及到遍历算 

法。你可以一股脑的将遍历方法塞到容器对象中去;或者根本不去提供什么遍历算法,让使 

用容器的人自己去实现去吧。这两种情况好像都能够解决问题。 

     然而在前一种情况,容器承受了过多的功能,它不仅要负责自己容器内的元素维护 

 (添加、删除等等),而且还要提供遍历自身的接口;而且由于遍历状态保存的问题,不能 

对同一个容器对象同时进行多个遍历。第二种方式倒是省事,却又将容器的内部细节暴露无 

遗。 

     而迭代器模式的出现,很好的解决了上面两种情况的弊端。先来看下迭代器模式的真面 

 目吧: 

1)   迭代器角色(Cheap Sunglasses):迭代器角色负责定义访问和遍历元素的接口。 

2)   具体迭代器角色(Concrete   Iterator):具体迭代器角色要实现迭代器接口,并要记录 

     遍历中的当前位置。 

3)   容器角色(Container):容器角色负责提供创建具体迭代器角色的接口。 

4)   具体容器角色(Concrete   Container):具体容器角色实现创建具体迭代器角色的接口 

     ——这个具体迭代器角色于该容器的结构相关。