您的位置:首页 > 编程语言 > Java开发

Java Iterator的设计模式

2015-06-11 21:34 239 查看
今天看了“Thinking in java”Inner class章节,对Iterator的设计模式有了一点感悟,这里结合自己的拙见分享给感兴趣的各位。

java 和c++比起来,java的内部类不仅能够起到隐藏内部类名的作用,还能自由的调用包含它的外部类成员变量和方法。所以如果有一个Sequence,要能直接访问其起始对象,队列长度,移动当前指针,还要能获取当前对象(比如对ArrayList等结构的操作)我们就用一个Iterator(迭代器)来实现上述操作。

虽然迭代器需要的操作大致相同,但不同队列里的对象类型往往不同,如果非要用Object类也行,或许不同队列对于迭代器还有更多需求,所以可以用一个Selector 接口来让其他迭代器类以自己的方式实现,同样如上一篇博客所说,接口作为外部方法的参数可以提高该方法的复用性。

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<item.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++;}
}
private Selector selector(){
return new SequenceSelector();
}//接口Selector 提高了selector()方法的复用性
}


public class TestIteratorPattern{
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();//内部类都需要外部类的对象来创建,除非这个内部类是static的
while(!selector.end())
{
System.out.print(selector.current()+" ");
selector.next();
}//0 1 2 3 4 5 6 7 8 9
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: