// Sequence.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();
}
public static void main(String[] args){
Sequence sequence = new Sequence(10);
for(int i = 0; i < 10; i++)
sequence.add(Integer.toString(i));
Selector selector = sequence.selector();
while(!selector.end()){
System.out.println(selector.current()+" ");
selector.next();
}
}
}
// 书上的原话:
举个例子,如果Sequence.java不适用内部类,就必须声明“Sequence是一个Selector”,对于某个特定的Sequence只能有一个Selector。然而使用内部类很容易能够拥有另一个方法reverseSelector(),用它来生成一个反向遍历的Selector。只有内部类才有这种灵活性。
// 问题:
实现Sequence.java中的reverseSelector()方法