概述
- 定义:提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示
- 试用场景:
- 访问一个聚合对象的内容而无须暴露它的内部表示
- 需要为聚合对象提供多种遍历方式
- 为遍历不同的聚合结构提供一个统一的接口
实现
// 迭代器接口
public interface Iterator<T> {
boolean hasNext();
T next();
}
// 集合类接口
public interface List<T> {
void add(T obj);
Iterator<T> iterator();
}
// 具体集合类
class ConcreteList<E> implements List<E> {
Object[] arr;
private int index;
public ConcreteList(int i) {
arr = new Object[i];
}
@Override
public void add(E obj) {
arr[index++] = obj;
}
@Override
public Iterator<E> iterator() {
return new ConcreteItyerator();
}
// 实现自己的迭代器
private class ConcreteItyerator implements Iterator<E> {
private int i;
@Override
public boolean hasNext() {
return i <= arr.length - 1;
}
@SuppressWarnings("unchecked")
@Override
public E next() {
return (E) arr[i++];
}
}
}
实际应用
迭代器模式在JDK中应用的十分广泛,各种List、Set都使用了迭代器模式,使得访问集合内部对象而不需知晓其内部具体实现