《迭代器模式》
Java中所有Collection下的集合都有一个iterator()方法返回Iterator接口的实现类,用于对该集合的遍历操作,这实际上就使用到了迭代器模式:提供一个方法顺序访问一个聚合对象的每一个元素,而有不暴露该对象的内部实现。
迭代模式的结构:
用代码模拟一下迭代器模式:
//抽象迭代器
public interface MyIterator {
boolean hasNext();
Object next();
}
//抽象容器
public interface MyList {
MyIterator createIterator();
void add(Object obj);
Object get();
}
//具体容器
public class ConcreteMyList implements MyList {
private List<Object> list = new ArrayList<>();
@Override
public MyIterator createIterator() {
return new ConcreteMyIterator(list);
}
@Override
public void add(Object obj) {
list.add(obj);
}
@Override
public Object get() {
return createIterator().next();
}
}
//具体迭代器
public class ConcreteMyIterator implements MyIterator {
private List<Object> list;
private int pointer;
public ConcreteMyIterator(List<Object> list) {
this.list = list;
}
@Override
public boolean hasNext() {
if (pointer < list.size()){
return true;
}
return false;
}
@Override
public Object next() {
Object obj = list.get(pointer);
pointer++;
return obj;
}
}
//测试
public static void main(String[] args) {
ConcreteMyList list = new ConcreteMyList();
list.add(1);
list.add(2);
list.add(3);
MyIterator iterator = list.createIterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
总结
迭代器的优点:
1.提供了非常简单的遍历方法,客户端无需知道容器的内部结构,通过迭代器就可以轻易的获取元素
2.可以提供多种遍历方式,如正序或者倒序。
因为Java已经为每一个集合设计好了迭代器,所以我们在使用时往往感觉不到迭代器模式的存在,而且在Java5之后,又有了Iterable接口,使得集合和数组的遍历更加方便。