Java与设计模式(二十六)行为型--迭代器模式

一、概述

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

二、 解决的问题

遍历整个整合对象

三、模式中的角色

  • 1、抽象迭代器(Iterator):定义出遍历元素所需的接口。
  • 2、具体迭代器(ConcreteIterator):实现Iterator接口,并保持迭代过程中的游标位置。
  • 3、聚集(Aggregate):给出创建迭代器(Iterator)对象的接口。
  • 4、具体聚集(ConcreteAggregate):实现创建迭代器(Iterator)对象的接口,返回一个合适的具体迭代器实例。
  • 5、客户端(Client):持有对聚集及其迭代子对象的引用,调用迭代器对象的迭代接口。

四、模式解读

迭代器模式的类图如下所示

这里写图片描述

五、JDK涉及到的设计模式

JDK中Iterator和Collection

这里写图片描述

ArrayList为具体聚合对象,创建了具体的ArrayList ItrArrayList I t r 和 A r r a y L i s t ListItr的具体迭代器类。

六、模式总结

优点

  • 1、迭代器模式简化了聚集的界面。
  • 2、因为每一个聚集对象可以有多个迭代器对象,每个迭代器状态是独立的。
  • 3、由于遍历算法被封装在迭代器角色里面,因此迭代的算法可以独立于聚集角色变化。

缺点

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

适用场景

  • 1、访问一个聚合对象的内容而无须暴露它的内部表示。
  • 2、需要为聚合对象提供多种遍历方式。
  • 3、为遍历不同的聚合结构提供一个统一的接口。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
├─Chapter1 │ ├─上机部分 │ │ └─教学幻灯片 │ │ └─上机课答案 │ │ ├─阶段1 │ │ ├─阶段2 │ │ ├─阶段3 │ │ └─阶段4 │ ├─教学指导 │ │ ├─上机课作业答案 │ │ │ ├─作业1 │ │ │ ├─作业2 │ │ │ └─作业3 │ │ ├─理论课作业答案 │ │ └─补充案例 │ │ ├─案例1 │ │ └─案例2 │ └─理论部分 │ └─教学幻灯片 │ └─课堂案例 │ └─S2JavaSG │ ├─.hibernateSynchronizer3 │ ├─.settings │ └─src │ └─s2Java │ └─sg │ └─ch01 │ ├─exercise │ └─homework ├─Chapter2 │ ├─上机部分 │ │ └─教学幻灯片 │ │ └─上机课答案 │ │ ├─阶段1 │ │ ├─阶段2 │ │ ├─阶段3 │ │ └─阶段4 │ ├─教学指导 │ │ ├─上机课作业答案 │ │ │ ├─作业1 │ │ │ ├─作业2 │ │ │ └─作业3 │ │ ├─理论课作业答案 │ │ ├─补充案例 │ │ │ ├─案例1 │ │ │ └─案例2 │ │ └─附加题答案 │ │ ├─附加题1 │ │ ├─附加题2 │ │ └─附加题3 │ └─理论部分 │ └─教学幻灯片 │ └─课堂案例 │ └─S2JavaSG │ ├─.hibernateSynchronizer3 │ ├─.settings │ └─src │ └─s2Java │ └─sg │ └─ch02 │ └─exercise ├─Chapter3 │ ├─上机部分 │ │ └─教学幻灯片 │ │ └─上机课答案 │ │ ├─阶段1 │ │ ├─阶段2 │ │ ├─阶段3 │ │ └─阶段4 │ ├─教学指导 │ │ ├─上机课作业答案 │ │ │ ├─作业1 │ │ │ ├─作业2 │ │ │ └─作业3 │ │ ├─理论课作业答案 │ │ ├─补充案例 │ │ │ ├─案例1 │ │ │ ├─案例2 │ │ │ └─案例3 │ │ └─附加题答案 │ │ ├─附加题1 │ │ ├─附加题2 │ │ └─附加题3 │ └─理论部分 │ └─教学幻灯片 │ └─课堂案例 │ └─S2JavaSG │ ├─.hibernateSynchronizer3 │ ├─.settings │ └─src │ └─s2Java │ └─sg │ └─ch03 │ ├─exercise │ └─homework ├─Chapter4 │ ├─上机部分 │ │ └─教学幻灯片 │ │ └─上机课答案 │ │ ├─阶段1 │ │ ├─阶段2 │ │ ├─阶段3 │ │ └─阶段4 │ ├─教学指导 │ │ ├─上机课作业答案 │ │ │ ├─作业1 │ │ │ ├─作业2 │ │ │ └─作业3 │ │ ├─理论课作业答案 │ │ ├─补充案例 │ │ │ └─案例1 │ │ └─附加题答案 │ │ ├─附加题1 │ │ ├─附加题2 │ │ └─附加题3 │ └─理论部分 │ └─教学幻灯片 │ └─课堂案例 │ └─S2JavaSG │ ├─.hibernateSynchronizer3 │ ├─.settings │ └─src │ └─s2Java │ └─sg │ └─ch04 │ ├─exercise │ └─homework ├─DLC1 │ ├─授课素材 │ ├─提供给学员的素材 │ └─源代码 │ ├─阶段1 │ │ ├─ioequip │ │ └─mainframe │ ├─阶段2 │ └─阶段3 │ └─driver ├─上机贯穿案例 └─理论贯穿案例 └─S2JavaSG ├─.hibernateSynchronizer3 ├─.settings ├─bin │ └─s2Java │ └─sg │ ├─appendix │ │ ├─colors │ │ └─drawing │ ├─ch01 │ │ ├─exercise │ │ └─homework │ ├─ch02 │ │ └─exercise │ ├─ch03 │ │ ├─exercise │ │ └─homework │ └─ch04 │ ├─exercise │ └─homework └─src └─s2Java └─sg ├─appendix │ ├─colors │ └─drawing ├─ch01 │ ├─exercise │ └─homework ├─ch02 │ └─exercise ├─ch03 │ ├─exercise │ └─homework └─ch04 ├─exercise └─homework
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值