1 介绍
用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。给顺序访问集合对象提供了一共统一方式。
2 例子
设计字符串容器类,并且用迭代器去访问元素。
2.1 迭代器接口
//迭代器接口
interface Iterator {
//有没有下一个对象
boolean hasNext();
//返回一个对象
Object next();
}
2.2 容器接口
//容器接口
interface Container {
Iterator getIterator();
}
2.3 实现一个字符串容器
//实现一个容器
class StringList implements Container{
//存储一个字符串,容器类型随意
private List<String> list=new ArrayList<>();
//添加元素方法
public void add(String now){
list.add(now);
}
//创建一个接口内部类
class StringIterator implements Iterator{
int index=0;
@Override
public boolean hasNext() {
if(index>=list.size()) return false;
else return true;
}
@Override
public String next() {
if (hasNext()){
return list.get(index++);
}
return null;
}
}
@Override
public Iterator getIterator() {
return new StringIterator();
}
}
2.4 测试主类
public class Main {
public static void main(String[] args) {
//新建一个字符串容器类
StringList stringList=new StringList();
//添加元素
stringList.add("我");
stringList.add("爱");
stringList.add("你");
//访问输出
Iterator iterator=stringList.getIterator();//每次使用都要新get一次
while (iterator.hasNext()){
System.out.println((String)iterator.next());
}
}
}
注意,每次要访问的时候,都需要重新get一个迭代器。
3 例子升华
例子采用了list去实现容器存储,其实还可以使用其他容器,迭代器使得访问接口统一的方式。
4 总结
4.1 核心角色
迭代器模式的核角色就是这样一个迭代器接口:
interface Iterator {
//有没有下一个对象
boolean hasNext();
//返回一个对象
Object next();
}
4.2 核心代码结构
实现这个接口,然后在一个容器中有返回迭代器的方法。