迭代器模式

来源:互联网 发布:多用户博客系统源码 编辑:程序博客网 时间:2024/06/08 00:57

迭代器模式

迭代器模式(iterator pattern),提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
提供一中遍历集合的方法,但是会隐藏集合的保存及读取逻辑。迭代器会提供如开始,下一个,是否结束,当前的正在访问的一项等统一的接口。
public interface Iterator<T> {public abstract T first();public abstract T next();public abstract boolean isDone(); public abstract T currentItem();}

public interface Aggregate<T> {public abstract Iterator<T> getIterator();}

public class ConcreteAggregateimplements Aggregate<String>{


private List<String>userNames = new ArrayList<String>();

@Override

public Iterator<String> getIterator() {

return new ConcreteIterator(this);

}

public int getCount() {

return userNames.size();

}

public void add(String name) {

userNames.add(name);

}

public String get(inti) {

return userNames.get(i);

}

}

public class ConcreteIterator implements Iterator<String>{private ConcreteAggregate aggregate;private int currentPoc = 0;public ConcreteIterator(ConcreteAggregate aggregate) {this.aggregate = aggregate;}@Overridepublic String first() {// TODO Auto-generated method stubreturn aggregate.get(0);}@Overridepublic String next() { String item = null;currentPoc++;if (currentPoc<aggregate.getCount()) {item = aggregate.get(currentPoc);}return item;}@Overridepublic boolean isDone() { boolean end = currentPoc > aggregate.getCount()-1;return end;}@Overridepublic String currentItem() { return aggregate.get(currentPoc);}}
ConcreteAggregate aggregate = new ConcreteAggregate();aggregate.add("#1");aggregate.add("#2");aggregate.add("#3");aggregate.add("#4");aggregate.add("#5");aggregate.add("#6");aggregate.add("#7");aggregate.add("#8");Iterator<String> iterator = aggregate.getIterator();while (!iterator.isDone()) {System.out.println(iterator.currentItem());iterator.next();}}

结果如下:

#1

#2

#3

#4

#5

#6

#7

#8




原创粉丝点击