迭代器模式
定义
它提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节
代码
迭代器接口
1 2 3 4 5
| public interface MyIterator { Object next(); boolean hasNext(); boolean remove(); }
|
迭代器实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| public class ConcreteIterator implements MyIterator {
private Vector vector = new Vector(); private int cursor = 0;
public ConcreteIterator(Vector vector) { this.vector = vector; }
@Override public Object next() { Object object ; if (this.hasNext()) { object = this.vector.get(cursor++); } else { object = null; } return object; }
@Override public boolean hasNext() { if (this.cursor == this.vector.size()) { return false; } else { return true; } }
@Override public boolean remove() { this.vector.remove(this.cursor); return true; } }
|
需要迭代的接口
1 2 3 4
| public interface Aggregate { void add(Object object); MyIterator myIterator(); }
|
需要迭代的实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class ConcreteAggregate implements Aggregate {
private Vector vector = new Vector();
@Override public void add(Object object) { this.vector.add(object); }
@Override public MyIterator myIterator() { return new ConcreteIterator(this.vector); } }
|
测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public class ConcreteAggregateTest {
@Test public void testIterator(){ Aggregate aggregate = new ConcreteAggregate(); aggregate.add("11"); aggregate.add("22"); aggregate.add("33"); aggregate.add("44"); MyIterator iterator = aggregate.myIterator(); while(iterator.hasNext()){ System.out.println(iterator.next()); } }
}
|