遍历聚合对象中的元素——迭代器模式(六)

转载 2013年12月05日 20:07:37

文章转载:http://blog.csdn.net/lovelion/article/details/9992931

6 迭代器模式总结

       迭代器模式是一种使用频率非常高的设计模式,通过引入迭代器可以将数据的遍历功能从聚合对象中分离出来,聚合对象只负责存储数据,而遍历数据由迭代器来完成。由于很多编程语言的类库都已经实现了迭代器模式,因此在实际开发中,我们只需要直接使用JavaC#等语言已定义好的迭代器即可,迭代器已经成为我们操作聚合对象的基本工具之一。

 

       1. 主要优点

       迭代器模式的主要优点如下:

       (1) 它支持以不同的方式遍历一个聚合对象,在同一个聚合对象上可以定义多种遍历方式。在迭代器模式中只需要用一个不同的迭代器来替换原有迭代器即可改变遍历算法,我们也可以自己定义迭代器的子类以支持新的遍历方式。

       (2) 迭代器简化了聚合类。由于引入了迭代器,在原有的聚合对象中不需要再自行提供数据遍历等方法,这样可以简化聚合类的设计。

       (3) 在迭代器模式中,由于引入了抽象层,增加新的聚合类和迭代器类都很方便,无须修改原有代码,满足“开闭原则”的要求。

 

       2. 主要缺点

       迭代器模式的主要缺点如下:

       (1) 由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。

       (2) 抽象迭代器的设计难度较大,需要充分考虑到系统将来的扩展,例如JDK内置迭代器Iterator就无法实现逆向遍历,如果需要实现逆向遍历,只能通过其子类ListIterator等来实现,而ListIterator迭代器无法用于操作Set类型的聚合对象。在自定义迭代器时,创建一个考虑全面的抽象迭代器并不是件很容易的事情。

 

       3. 适用场景

       在以下情况下可以考虑使用迭代器模式:

       (1) 访问一个聚合对象的内容而无须暴露它的内部表示。将聚合对象的访问与内部数据的存储分离,使得访问聚合对象时无须了解其内部实现细节。

       (2) 需要为一个聚合对象提供多种遍历方式。

       (3) 为遍历不同的聚合结构提供一个统一的接口,在该接口的实现类中为不同的聚合结构提供不同的遍历方式,而客户端可以一致性地操作该接口。

疑问练习

       设计一个逐页迭代器,每次可返回指定个数(一页)元素,并将该迭代器用于对数据进行分页处理。

【作者:刘伟   http://blog.csdn.net/lovelion


举报

相关文章推荐

遍历聚合对象中的元素——迭代器模式(五)

遍历聚合对象中的元素——迭代器模式(五) 5 JDK内置迭代器        为了让开发人员能够更加方便地操作聚合对象,在Java、C#等编程语言中都提供了内置迭代器。在Java集合框...

遍历聚合对象中的元素——迭代器模式

遍历聚合对象中的元素——迭代器模式(六) 6 迭代器模式总结        迭代器模式是一种使用频率非常高的设计模式,通过引入迭代器可以将数据的遍历功能从聚合对象中分离出来,聚合对象只...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

遍历聚合对象中的元素——迭代器模式(一)

遍历聚合对象中的元素——迭代器模式(一)        20世纪80年代,那时我家有一台“古老的”电视机,牌子我忘了,只记得是台黑白电视机,没有遥控器,每次开关机或者换台都需...

遍历聚合对象中的元素——迭代器模式

什么是迭代器模式在软件开发中,我们经常需要使用聚合对象来存储一系列数据。聚合对象拥有两个职责:一是存储数据;二是遍历数据。从依赖性来看,前者是聚合对象的基本职责;而后者既是可变化的,又是可分离的。因此...
  • Todo_
  • Todo_
  • 2016-02-28 12:05
  • 416

遍历聚合对象中的元素——迭代器模式(二)

遍历聚合对象中的元素——迭代器模式(二) 2 迭代器模式概述        在软件开发中,我们经常需要使用聚合对象来存储一系列数据。聚合对象拥有两个职责:一是存储数据;...

遍历聚合对象中的元素——迭代器模式(三)

3 完整解决方案       为了简化AbstractObjectList类的结构,并给不同的具体数据集合类提供不同的遍历方式,Sunny软件公司开发人员使用迭代器模式来重构AbstractObjec...

遍历聚合对象中的元素——迭代器模式(Iterator Pattern)

一、引言 在上篇博文中分享了我对命令模式的理解,命令模式主要是把行为进行抽象成命令,使得请求者的行为和接受者的行为形成低耦合。在一章中,将介绍一下迭代器模式。下面废话不多说了,直接进入本博文的主题。...

遍历聚合对象中的元素——迭代器模式(四)

4 使用内部类实现迭代器       在迭代器模式结构图中,我们可以看到具体迭代器类和具体聚合类之间存在双重关系,其中一个关系为关联关系,在具体迭代器中需要维持一个对具体聚合对象的引用,该关联关系的目...

STL中迭代器失效——用erase()方法遍历删除元素

STL迭代器失效的情况         STL中的容器按存储方式分为两类,一类是按以数组形式存储的顺序容器(如:vector 、deque);另一类是以不连续的节点形式存储的容器(如:list、se...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)