设计模式之迭代模式(Iterator)

意图:提供一种顺序访问一个聚合对象中各个元素,而不需要暴露聚合对象内部行为。即将列表的访问和遍历从列表对象中分离出来,放入迭代器对象中。使遍历和列表对象接口。可产生一个列表对象可以复用多个迭代器(多种遍历方式),一个迭代器支持多个列表对象(多个列表对象由相同遍历算法,或者列表对象本身提供算法差异部分)的编程效果效果。


类图:(来自《设计模式:可复用面向对象软件的基础》)




参与者:

Aggregate(聚合对象接口):聚合对象接口,定义了创建相应迭代器(Iterator)的接口。

Iterator(迭代器接口):迭代器的接口,定义顺序访问遍历聚合对象内容的相关方法。遍历方式可以是正序、倒叙(针对集合)、前序、后序、中序以及广度遍历(针对数集合或者复合对象)。方法可以根据实际情况相应扩展或者减少。

ConcreteAggregate(聚合对象实现类):聚合对象实现类,保存遍历的聚合数据。实现聚合对象接口。负责创建返回迭代器(iterator)的具体实现类(ConcreteIterator)。

ConcreteIterator(迭代器实现类):实现迭代器接口,提供实际的遍历方法(遍历算法可以自己通过,也聚合实现类(ConcreteAggregate)提供)。

Client(使用者):迭代器遍历使用者,持有聚合对象接口(Aggregate)和迭代器接口(Iterator)。不持有迭代器实现类(ConcreteIterator),可能持有聚合对象实现类(ConcreteAggregate)(具体看ConcreteAggregate产生方式,若非直接new,也不持有)。


优点(来自《设计模式:可复用面向对象软件的基础》):


设计模式相关说明:

空迭代器:是一个退化的迭代器,IsDone()始终返回true。

外部迭代器:由使用者来控制迭代的迭代器。相对于内部迭代器更加灵活,但是比较复杂。

内部迭代器:由迭代器自己控制迭代。相应外部比较容易。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值