软件设计 迭代器模式(high)Iterator Pattern
作者:@kuaiquxie
作者的github:https://github.com/bitebita
本文为作者原创,如需转载,请注明出处:https://www.cnblogs.com/dzwj/p/17111692.html
迭代器模式是 Java 中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,而不需要知道集合对象的底层表示。
迭代器是学习 Java 语言的基础,没有迭代器,集合类的遍历就成了问题,正是因为有迭代器的存在,才能更加优雅的使用 foreach 语法。
代码实现:
Java 中的增强 for 循环是使用迭代器实现的:
List<String> list = Arrays.asList("AAA", "BBB", "CCC");
// 使用 foreach 语法糖进行迭代,依次获取每一个元素
for (String s : list) {
// 打印元素
System.out.println(s);
}
编译之后的代码如下:
List<String> list = Arrays.asList("AAA", "BBB", "CCC");
// 这里本质是通过 List 生成的迭代器来遍历每个元素的
Iterator var2 = list.iterator();
// 判断是否还有元素可以迭代,没有就返回false
while(var2.hasNext()) {
// 通过 next 方法得到下一个元素,每调用一次,迭代器会向后移动一位
String s = (String)var2.next();
// 打印元素
System.out.println(s);
}
可以看到,当使用迭代器对 List 进行遍历时,实际上就像是在操作一个指向列表头部的指针,通过不断向后移动指针来依次获取所指向的元素。
1.这里依照 JDK 提供的迭代器接口(JDK 已经定义好了一个迭代器的具体相关操作接口),也来设计一个迭代器:
1、定义数组集合
/**
* 数组集合<br>
* 实现 Iterable 接口表示此类是支持迭代的
*/
public class ArrayCollection<T> implements Iterable<T> {
/**
* 使用数组来存放数据
*/
private final T[] array;
/**
* 构造器私有,自己用
* @param array 数组
*/
private ArrayCollection(T[] array) {
this.array = array;
}
/**
* 使用静态方法获取对象
* @param array 数组
* @return 数组集合对象
* @param <T> 实体类
*/
public static <T> ArrayCollection<T> of(T[] array) {
return new ArrayCollection<>(array);
}
/**
* 实现 iterator 方法,此方法会返回一个迭代器,用于迭代我们集合中的元素
* @return 迭代器
*/