interface Selector{
boolean end(); //结束标志
Object current(); //当前对象
void next(); //下一个对象
}
/**
* 内部类大展身手 ———— 可以让多个内部类以不同的方式实现同一个接口,或继承同一个类。
* 如果不使用内部类,对于某个特定的Sequence只能有一个Selector。
*/
public class Sequence {
private Object[] items;
private int next = ; //辅助添加数据
public Sequence(int size) {
items = new Object[size];
}
public void add(Object object){
items[next++] = object;
}
public Selector selector(){ //正序
return new Selector() { //匿名内部类实现接口
private int i = ;
@Override
public boolean end() {
return i == items.length;
}
@Override
public Object current() {
return items[i];
}
@Override
public void next() {
if (i<items.length){ i++; }
}
};
}
public Selector reserveSelector(){ //逆序
return new Selector() {
private int i = items.length-;
@Override
public boolean end() {
return i < ;
}
@Override
public Object current() {
return items[i];
}
@Override
public void next() {
if (i>=) { i--; }
}
};
}
public static void main(String[] args) {
Sequence sequence = new Sequence();
for (int i = ; i < ; i++) {
sequence.add(Integer.toString(i));
}
Selector selector = sequence.selector();
while (!selector.end()){
System.out.print(selector.current()+" ");
selector.next();
}
System.out.println();
selector = sequence.reserveSelector();
while (!selector.end()){
System.out.print(selector.current()+" ");
selector.next();
}
}
}