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();
}
}
}