一、迭代器模式介绍

迭代器模式(Iterator Design Pattern)属于行为型模式,用于遍历容器中的属性对象。
加上迭代器,遍历元素的方式一共有三种,如下代码:
[设计模式]-[行为型]-迭代器-介绍及应用 - 图1
分别是:计数器遍历,迭代器遍历和foreach遍历。
迭代器是其中一种遍历方式(foreach 底层也是迭代器)

二、迭代模式模板

场景:模拟实现一个具有迭代器功能的 ArrayList

2.1、接口定义

2.1.1、迭代器接口

定义迭代器接口 Iterator<E>,代码如下:
[设计模式]-[行为型]-迭代器-介绍及应用 - 图2

2.1.2、标识容器接口具有迭代器功能接口定义

定义接口 Iterable<E> 用以标识容器接口具有迭代器功能,并定义接口用以返回迭代器实现,代码定义如下:
[设计模式]-[行为型]-迭代器-介绍及应用 - 图3

2.1.3、集合 List 接口定义

定义集合接口 List<E> ,同时继承 Iterable<E> 接口,表示集合具有可迭代能力。
代码实现如下:
[设计模式]-[行为型]-迭代器-介绍及应用 - 图4

2.2、迭代器实现 ArrayListIterator

实现迭代器接口 Iterator,实现 ArrayList 集合实现的专属迭代器 ArrayListIterator ,代码实现如下:
[设计模式]-[行为型]-迭代器-介绍及应用 - 图5
如上述代码所示,迭代器进行迭代,本身就是计数器迭代。

2.3、容器实现 ArrayList

实现 List<E> 接口,实现容器实现 ArrayList ,代码如下:
[设计模式]-[行为型]-迭代器-介绍及应用 - 图6
代码重点:

  • Object[] elementData:真实数据存储位置
  • iterator():获取迭代器的方法定义
  • add():添加元素

    2.4、使用案例

    ArrayList 在初始化数据后,数据会存储在数组中,迭代器的遍历,就是通过遍历数组实现的。

【公众号】花好夜猿
wxlogo.jpg