一、迭代器模式
1、迭代器模式
迭代器模式(Iterator Pattern)是一种行为型设计模式,用于顺序访问集合对象的元素,不需要关心集合对象的底层表示。如:java中的Iterator接口就是这个工作原理。
2、实现思路
(1)、定义表达式的规范(一般就是:hasNext,getNext)
(2)、编写实现类,实现该规范接口。(可以用过index索引来校验)
(3)、编写新的容器类,内置实现类和集合类,通过调用容器内部的实现类来获取容器内部集合属性的元素。
二、代码示例
1、示例场景
编写迭代器,通过迭代器的方法获取和校验下一个元素。
2、代码示例
// 1、编写规范类
public interface Iterator1 {
Object getNext();
boolean hasNext();
}
// 2、编写实现类迭代器
import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
public class ListIterator implements Iterator1 {
List<Object> objectList;
private int index = 0;
public ListIterator(List<Object> objectList) {
if (CollectionUtils.isEmpty(objectList)) {
this.objectList = new ArrayList<>();
} else {
this.objectList = objectList;
}
}
@Override
public Object getNext() {
Object obj = null;
if (hasNext()) {
obj = objectList.get(index);
index++;
}
return obj;
}
@Override
public boolean hasNext() {
if (index < objectList.size()) {
return true;
}
return false;
}
}
// 3、自定义容器,内置迭代器,通过迭代器获取集合元素
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class MyContainer {
private List<String> nameList;
private ListIterator listIterator;
public MyContainer(List<String> list) {
this.nameList = list;
listIterator = new ListIterator(new ArrayList<>(list));
}
}
// 4、测试
public static void main(String[] args) {
List<String> nameList = new ArrayList<>();
nameList.add("zhangsan");
nameList.add("lisi");
nameList.add("wangwu");
MyContainer myContainer = new MyContainer(nameList);
ListIterator myIterator = myContainer.getListIterator();
while (myIterator.hasNext()){
System.out.println(myIterator.getNext());
}
}
运行结果:
可以看到已经遍历打印了所有的元素。
总结:
迭代器模式主要用来处理数据集合,可以在不关注集合底层类型的情况下获取下一个元素或上一个元素(可以在上面的示例代码中追加规范方法进行扩展)。相对于java本身的Iterator接口来说,非常类似,使用场景目现也比较小,目前大部分的三方工具包都包含对集合的处理方法,可以了解一下。
学海无涯苦作舟!!!