第九章行为模式-1-迭代器模式.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第九章 行为模式 迭代器模式(ITERATOR)-对象行为模式 观察者模式(OBSERVER) -对象行为模式 状态模式(STATE) -对象行为模式 ITERATOR(迭代器)-对象行为型模式 1.意图 迭代器模式(Iterator),提供一种方法顺序访问一个集合对象中的各个元素,而不暴露该对象的内部表示。 2.别名 游标(Cursor) 3.动机 一个聚合对象,例如列表(list),应该提供一种方法来让人可以访问它的元素,而又不需暴露它的内部结构。此外,针对不同的需要,可能要以不同的方式遍历这个列表。但是即使可以预见到所需的那些遍历操作,你可能也不希望列表的接口中充斥着各种不同遍历的操作。有时还可能需要在同一个列表上同时进行多个遍历。 迭代器模式都可以帮你解决所有这些问题。 这一模式的关键思想是将对列表的访问和遍历从列表对象中分离出来并放入一个迭代器(iterator)对象中。 迭代器类定义了一个访问该列表元素的接口。 迭代器对象负责跟踪当前的元素;即,它知道哪些元素已经遍历过了。 例如,一个列表(List)类可能需要一个列表迭代器(ListIterator),它们之间的关系如下图: List Count( ) Append(Element) Remove(Element) …… ListIterator First( ) Next(Element) IsDone(Element) CurrentIterm( ) idnex list 在实例化列表迭代器之前,必须提供待遍历的列表。一旦有了该列表迭代器的实例,就可以顺序地访问该列表的个元素。 CurrentItem操作返回列表中的当前元素, First操作初始化迭代器,使当前元素指向列表的第一个元素 Next操作将当前元素指针向前推进一步,指向下一个元素 而IsDone检查是否已超过最后一个元素,也就是完成了这次遍历。 将遍历机制与列表对象分离使我们可以定义不同的迭代器来实现不同的遍历策略,而无需在列表接口中列举它们。例如,过滤列表迭代器(FilteringListIterator)可能只访问那些满足特定过滤条件的元素。 注意迭代器和列表是耦合在一起的,而且客户对象必须知道遍历的是一个列表而不是其他聚合结构。最好能有一种办法使得不需改变客户代码即可以改变该聚合类。可以通过将迭代器的概念推广到多态迭代(polymorphic iteration)来达到这个目标。 例如,假定我们还有一个列表的特殊实现,比如说SkipList。SkipList是一种具有类似于平衡树性质的随机数据结构。我们希望我们的代码对List和SkipList对象都适用。 首先,定义一个抽象列表类AbstractList,它提供操作列表的公共接口。类似地,我们也需要一个抽象的迭代器类Iterator,它定义公共的迭代接口。然后我们可以为每个不同的列表实现定义具体的Iterator子类。这样迭代机制就与具体的聚合类无关了。 AbstractList CreateIterator( ) Count( ) Append( item) Remove(item) …… Iterator First( ) Next( ) IsDone() CurrentItem() Client SkipList List ListIterator SkipListIterator 余下的问题是如何创建迭代器。既然要使这些代码不依赖于具体的列表子类,就不能仅仅简单地实例化一个特定的类,而要让列表对象负责创建相应的迭代器。这需要列表对象提供CreateIterator这样的操作,客户请求调用该操作以获得一个迭代器对象。 创建迭代器是一个Factroy Method模式的例子。我们在这里用它来使得一个客户可向一个列表对象请求合适的迭代器。Factroy Method模式产生两个类层次,一个是列表的,一个是迭代器的。CreateIterator联系这两个类层次。 4.适用性 迭代器模式可用来: 1.访问一个聚合对象的内容而无需暴露它的内部表示。 2.支持对聚合对象的多重遍历。 3.为遍历不同的聚合结构提供一个统一的接口(即,支持多态迭代)。 5.结构 6.参与者 Iterator(迭代器):迭代器定义访问和遍历元素的接口。 ConcreteIterator(具体迭代器):具体迭代器实现迭代器接口;对该聚合遍历时跟踪当前位置。 Aggregate(聚合):聚合定义创建相应迭代器对象的接口。 ConcreteAggregate(具体聚合):具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例。 模型代码原型: static void Main

文档评论(0)

zilaiye + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档