一、又叫游标(Cursor)模式,是对象的行为模式java
- 迭代子模式能够顺序地访问一个汇集中的元素而没必要暴露汇集的内部表象
- 汇集依赖于汇集结构的抽象化,具备复杂化和多样性
- 数组就是最基本的汇集,也是其余的JAVA汇集对象的设计基础
- JAVA汇集对象是实现了共同的java.util.Collection接口的对象,是JAVA语言对汇集概念的直接支持
- JAVA语言提供了不少种汇集,包括Vector、ArrayList、HashSet、HashMap、Hashtable等,这些都是JAVA汇集的例子
二、迭代子模式的结构算法
白箱汇集与外禀迭代子数组
- 若是一个汇集的接口提供了能够用来修改汇集元素的方法,这个接口就是所谓的宽接口
- 这样会破坏对汇集对象的封装。这种提供宽接口的汇集叫作白箱汇集

- 因为汇集本身实现迭代逻辑,并向外部提供适当的接口,使得迭代子能够从外部控制汇集元素的迭代过程
- 这样一来迭代子所控制的仅仅是一个游标而已,这种迭代子叫作游标迭代子(Cursor Iterator)
- 因为迭代子是在汇集结构以外的,所以这样的迭代子又叫作外禀迭代子(Extrinsic Iterator)


黑箱汇集与内禀迭代子spa
- 若是一个汇集的接口没有提供修改汇集元素的方法,这样的接口就是所谓的窄接口



主动迭代子和被动迭代子
- 所谓主动(外部)迭代子,指的是由客户端来控制迭代下一个元素的步骤,客户端会明显调用迭代子的next()等迭代方法
- 所谓被动(内部)迭代子,指的是由迭代子本身来控制迭代下一个元素的步骤
- 整体来讲外部迭代器比内部迭代器要灵活一些,所以咱们常见的实现多属于主动迭代子
静态迭代子和动态迭代子
- 静态迭代子由汇集对象建立,并持有汇集对象的一份快照(snapshot),在产生后这个快照的内容就再也不变化
- 动态迭代子则与静态迭代子彻底相反,在迭代子被产生以后,迭代子保持着对汇集元素的引用
三、完整的动态迭代子不容易实现,可是简化的动态迭代子并不难实现设计
Fail Fast
- JAVA语言以接口java.util.Iterator的方式支持迭代子模式
- Collection接口要求提供iterator()方法,此方法在调用时返还一个Iterator类型的对象
- 做为Collection接口的子类型,AbstractList类的内部成员类Itr即是实现Iterator接口的类
迭代子模式的优势
- 迭代子模式简化了汇集的接口。迭代子具有了一个遍历接口,这样汇集的接口就没必要具有遍历接口
- 每个汇集对象均可以有一个或多个迭代子对象,每个迭代子的迭代状态能够是彼此独立的
- 因为遍历算法被封装在迭代子角色里面,所以迭代的算法能够独立于汇集角色变化