一、迭代器模式
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;}}@Overridepublic Object getNext() {Object obj = null;if (hasNext()) {obj = objectList.get(index);index++;}return obj;}@Overridepublic 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接口来说,非常类似,使用场景目现也比较小,目前大部分的三方工具包都包含对集合的处理方法,可以了解一下。
学海无涯苦作舟!!!