行为型模式—迭代器模式
硬肝系列目录
创建型模式
结构型模式
行为型模式
到目前为止、23种设计模式的创建型模式 and 结构型模式都已经给大家肝完了,现在我们进入到一个全新的章节!!!
什么是迭代器?主要解决什么问题呢?
对于迭代器,大家肯定都使用过Iterator,这就是最常见的迭代器,迭代器最重要的一个功能就是顺序访问一个集合里的对象,不展示知道容器内部的结构;
可以从不同的方式去遍历集合的对象
怎么定义一个迭代器呢?
首先我们要把遍历集合里元素的权利交给迭代器,而不是让集合本身去执行,集合只是负责存储元素,首先我们来看看最经常使用的迭代器是怎么使用
上代码
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class demo1 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("jack");
list.add("lisa");
list.add("james");
list.add("curry");
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
System.out.println("Name is " + iterator.next());
}
}
}
输出结果
我们就把这个例子以更底层的代码给大家简单展示一下,ArrayList底层为一个数组
直接上代码
定义一个Iterator接口,里面有一个hasNext()和next()
public interface Iterator {
boolean hasNext();
Object next();
}
定义一个集合接口,里面定义一个获取迭代器的方法
public interface ListTest {
Iterator getIIterator();
}
然后实现集合接口,将迭代器类作为集合类的一个静态内部类,这样做是为了方便演示,获取到集合类下所定义的数组
public class ArrayListTest implements ListTest{
private static final String[] group = {"Jack","James","Rose","YaoMing","Curry"};
@Override
public Iterator getIIterator() {
return new IteratorTest();
}
private static class IteratorTest implements Iterator{
private int index;
@Override
public boolean hasNext() {
return index < group.length;
}
@Override
public Object next() {
if(this.hasNext()){
return group[index++];
}
return null;
}
}
}
上面的这串代码就可以基本实现迭代器模式的效果了,我们先来看看实现效果
main方法
public static void main(String[] args) {
ArrayListTest arrayListTest = new ArrayListTest();
Iterator iterator = arrayListTest.getIIterator();
while(iterator.hasNext()){
System.out.println("Name is " + iterator.next());
}
}
打印结果:
我们也可以从后面遍历,只要将index从大变小就行,这就是将遍历集合的操作交给迭代器负责,实现了存储对象和遍历对象的职责分离,但是这也有一个缺点,看看我上面写的一个集合类对应一个迭代器,这会使代码变得复杂,不宜维护。
加油,这就是我们今天讲的内容啦,谢谢大家的支持,能给个赞赞赞赞赞嘛,你们的鼓励就是我的动力哟
完成:TO: 2021/3/29 22:54