使用内部类,实现Java的迭代器模式:
interface Selector{
boolean end();
Object current();
void next();
}
public class Sequence {
private Object[] items;
private int next = 0;
public Sequence(int size){
items = new Object[size];
}
public void add(Object x){
if(next < items.length)
items[next++] = x;
}
private class SequenceSelector implements Selector{
private int i = 0;
public boolean end(){ return i==items.length;}
public Object current(){ return items[i];}
public void next(){if(i<items.length) i++;}
}
public Selector selector(){
return new SequenceSelector();
}
}
使用SequenceSelector这个内部类实现selector这个接口,并在外部类中提供方法返回这个内部类的对象,这样在需要对外部类的列表对象进行遍历访问时,可通过生成一个内部类的对象来实现。调用方式为:
Selector selector = sequence.selector();
while(!selector.end()){
System.out.print(selector.current()+" ");
selector.next();
}
之所以是迭代器模式,体现在实现接口的内部类可以有多种类型,只要你提供一套迭代方法,就可以编写一个迭代器接口的实现类。
迭代器的优势还体现在:提供了一种统一的方式来顺序地或逆序地访问一个集合中的元素,而不必关心集合的结构。也就是说它允许在不暴露集合的内在表示的情况下访问集合的元素。只要该集合实现了迭代器接口就行。