1.定义
提供一种方法顺序访问一个容器对象中的各个元素,而又不需要暴露该对象的内部表示。
2.使用场景
遍历一个容器对象
3.简单实现
大部分容器类都有提供迭代方法 不需要我们自己实现,这里实现一个通用代码。
//迭代器接口
interface Iterator<T>{
//是否还有下一个元素 true表示有 false表示没有
boolean hasNext();
//返回当前位置的元素并将位置移至下一位
T nextT();
}
//具体的迭代器类
class ConcreteIterator<T> implements Iterator<T>{
private List<T> list = new ArrayList<T>();
private int cursor = 0;
public ConcreteIterator(List<T> list) {
this.list = list;
}
@Override
public boolean hasNext() {
return cursor != list.size();
}
@Override
public T nextT() {
T obj = null;
if (this.hasNext()){
obj = this.list.get(cursor++);
}
return obj;
}
}
//容器接口
interface Aggregate<T>{
//添加一个元素
void add(T obj);
//删除一个元素
void remove(T obj);
//获取容器的迭代器
Iterator<T> iterator();
}
//具体容器类
class ConcreteAggregae<T> implements Aggregate<T>{
private List<T> list = new ArrayList<T>();
@Override
public void add(Object obj) {
list.add((T) obj);
}
@Override
public void remove(Object obj) {
list.remove(obj);
}
@Override
public Iterator iterator() {
return new ConcreteIterator<T>(list);
}
}
public class IteratorMode {
public static void main(String[] args){
Aggregate<String> a = new ConcreteAggregae<>() ;
a.add("a");
a.add("b");
a.add("c");
a.add("d");
Iterator<String> iterator =a.iterator();
while (iterator.hasNext()){
System.out.println(iterator.nextT());
}
}
}
4.小结
优点:
支持以不同的方式去遍历一个容器对象,也可以有多个遍历,弱化了容器与遍历算法之间的关系。
缺点:
增加了类文件。