星空网 > 软件开发 > ASP.net

设计模式学习笔记(八:迭代器模式)

1.1概述

    提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露对象的内部表示。这就是迭代器模式的定义。

    合理组织数据的结构以及相关操作是程序设计的一个重要方面,比如在程序设计中经常会使用诸如链表、散列表等数据结构。链表和散列表等数据结构都是可以存放若干个对象的集合,其区别是按照不同的方式进行存储对象。我们希望无论何种集合,应当允许程序以一种统一的方式遍历集合中的对象,而不需要知道这些对象在集合中是如何表达及存储的。

  例如,一栋楼中居住着张三、李四、王五三个人,分别被安排在不同的房间,张三知道李四的房间,李四知道王五的房间。假如有一个警察,他并不知道他们三个是如何居住的,只想找到他们,那么警察可以用一个next()方法找人,该方法的特点是在找到一个人的同时立刻让这个人说出他知道的下一个人的房间,然后警察再调用next()方法找到下一个人。如果警察调用next()方法首先找到张三,就可以依次找到李四和王五,具体如图一所示:

 设计模式学习笔记(八:迭代器模式)

 

图一:警察找人

    迭代器模式是遍历集合的成熟模式,迭代器模式的关键是将遍历集合的任务交给一个称作迭代器的对象。比如,前面所述的楼就是一个集合,其中的人就是集合中的对象,而警察就是一个迭代器。

 

1.2模式的结构

迭代器模式的结构中包括四种角色:

(1)集合(Aggregate):一个接口,规定了具体集合需实现的操作。

(2)具体集合(ConcreteAggregate):具体集合是实现集合接口的类的实例,具体集合按照一定的结构存储对象。具体集合应当有一个方法,该方法返回一个针对该集合的具体迭代器。

(3)迭代器(Iterator):一个接口,规定了遍历集合的方法,比如next()方法。

(4)具体迭代器(ConcreteIterator):实现迭代器接口的类的实例,具体迭代器在实现迭代器接口所规定的遍历集合的方法时,比如next()方法,要保证next()方法的首次调用即按照集合的数据结构找到该集合中的一个对象,而且每当找到集合中的一个对象,立刻根据该集合的存储结构得到待遍历的后继对象的引用,并保证依次调用next()方法可以遍历集合。

迭代器模式结构的类图如下图二所示:

设计模式学习笔记(八:迭代器模式) 

 

图二:迭代器模式类图

 

1.3迭代器模式的优点

(1)用户使用迭代器模式访问集合中的对象,而不需要知道这些对象在集合中是如何表达及存储的。

(2)用户可以同时使用多个迭代器遍历一个集合。

 

1.4适合使用迭代器模式的情景

 (1)让用户访问一个集合中对象,但不想暴露对象在集合中的存储结构。

 (2)希望对遍历不同的集合提供一个统一的接口。




原标题:设计模式学习笔记(八:迭代器模式)

关键词:设计模式

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流