interface Selector{
boolean end(); //结束标志
Object current(); //当前对象
void next(); //下一个对象
}
/**
* 内部类大展身手 ———— 可以让多个内部类以不同的方式实现同一个接口,或继承同一个类。
* 如果不使用内部类,对于某个特定的Sequence只能有一个Selector。
*/
public class Sequence {
private Object[] items;
private int next = 0; //辅助添加数据
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 = 0;
@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-1;
@Override
public boolean end() {
return i < 0;
}
@Override
public Object current() {
return items[i];
}
@Override
public void next() {
if (i>=0) { i--; }
}
};
}
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.print(selector.current()+" ");
selector.next();
}
System.out.println();
selector = sequence.reserveSelector();
while (!selector.end()){
System.out.print(selector.current()+" ");
selector.next();
}
}
}
内部类大展身手 ———— 多个内部类以不同的方式实现同一个接口,或继承同一个类
最新推荐文章于 2022-08-05 21:40:17 发布