迭代器模式Iterator 控制访问聚合对象中的元素

提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。
public interface Iterator {
  public void first();
  public void next();
  public boolean isDone();
  public Object currentItem();
}

public abstract class Aggregate {
  public abstract Iterator createIterator();
}

public class ConcreteAggregate extends Aggregate {
  private String[] ss = null;
  public ConcreteAggregate(String[] ss) {
   this.ss = ss;
  }
  public Iterator createIterator() {
    return new ConcreteIterator(this);
  }
  public Object get(int index) {
    Object retObj = null;
    if(index < ss.length) {
      retObj = ss[index];
    }
    return retObj;
  }
  public int size() {
    return this.ss.length;
  }
}

public class ConcreteIterator implements Iterator {
  private ConcreteAggregate aggregate;
  private int index=-1;
  public ConcreteIterator(ConcreteAggregate aggregate) {
    this.aggregate = aggregate;
  }
  public void first() {
    index = 0;
  }
  public void next() {
    if(index < this.aggregate.size()) {
      index += 1;
    }
  }
  public boolean isDone() {
    if(index == this.aggregate.size()) {
      return true;
    }
    return false;
  }
  public Object currentItem() {
    return this.aggregate.get(index);
  }
}

客户端代码:
String names={"张三","李四","王五"};
Aggregate aggregate = new ConcreteAggregate(names);
Iterator it = aggregate.createIterator();
it.first();
while(!it.isDone()) {
  Object obj = it.currentItem();
  it.next();
}

迭代器模式的功能主要在于提供聚合对象的迭代访问。

迭代器模式的关键思想就是把对聚合对象的遍历和访问从聚合对象中分离出来,放入单独的迭代器中。

内部迭代器:由迭代器自己来控制迭代下一个元素的步骤,客户端无法干预。
外部迭代器:由客户端来控制迭代下一个元素的步骤,客户端必须显式地调用next来迭代下一个元素。

猜你喜欢

转载自katy1206.iteye.com/blog/2028071