动机:在软件构建过程中,集合对象内部结构常常变化各异,但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素,同时这种“透明遍历”也为“同一种算法在多种集合对象上进行操作”提供了可能。
使用面向对象技术将这种遍历机制抽象为“迭代器对象”。
定义:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露(稳定)该对象的内部表示。
结构:
但是对于C++这类语言来说,这种面向对象的迭代器已经过时,取而代之的范式编程的迭代器,因为面向对象的迭代器运用了多态,使得在调用Next等方法时,其实调用的是子类中实现的Next方法,这样做的缺点是,它是在运行时通过函数表一层层查找到子类中的方法,而这种操作是在循环中的,所以性能较低。此外,这种迭代器只能每次向前走一步,功能比较单一。而范式编程的迭代器则是在编译阶段就确定了调用哪个方法,性能较高。而且可以向后走1步,走n步,向前走1步,走n步,和随机取值,共五种迭代方式,功能多样。但对于JAVA/C#之类的语言,还是使用面向对象的迭代器。
编程范式 (Programming paradigm):编程范式 (Programming paradigm) - 简书 主要分为命令式编程、面向对象编程、声明式编程等。
参考:https://www.bilibili.com/video/av24176315/?p=21
Java迭代器(iterator详解以及和for循环的区别)_Jae_Wang的博客-CSDN博客_java迭代器和for循环区别 java中Iterator详解、以及与for循环的差别,何时该用哪个