介绍
**定义:**在软件系统中, 容器通常有两个职责: 数据的存储和遍历. 从依赖性上看, 存储数据是聚合对象的基本职责而数据遍历则是可分离的. 迭代器模式将对象的遍历行为从容器中提取出来封装到迭代器对象中, 从而使聚合对象更加简单也更加符合单一职责原则.
UML

示例
在绝大多数编程语言中, 迭代器都是作为基本类库存在的. 在日常开发中, 基本也是直接使用类库中封装的迭代器, 需要从零实现迭代器的情况相当罕见.鉴于写示例代码的意义不大, 这里偷个懒就不写了, 实在感兴趣可以去看JDK中的 java.util.Iterator 接口及其实现类.
总结
使用场景
-
当需要减少程序中重复的遍历集合的代码时;
-
当需要为集合对象提供一个统一的遍历接口时.
优点:
1.更换同一对象的遍历方式相对简单, 只需定义一个迭代器的子类重写算法即可;
2.简化了集合类的结构, 由于迭代器的存在, 集合类无需再自行提供遍历方法;
3.由于有抽象层的存在, 无论是增加新的集合类还是迭代器都非常方便(编写对应遍历算法即可, 无需修改原有代码), 符合开闭原则.
缺点:
-
将数据存储和遍历的职责分离必然导致类的个数增加, 一定程度上增加了系统复杂度;
-
迭代器抽象层设计难度较大, 需要充分考虑到系统将来的拓展因素.