迭代器

35 阅读2分钟

迭代器模式(Iterator Pattern)是一种行为型模式,它允许访问一个聚合对象的内部元素,而又无需暴露该对象的内部表示。

迭代器模式的主要角色如下:

  • 聚合(Aggregate):定义了创建迭代器对象的接口。
  • 迭代器(Iterator):定义了遍历聚合对象的接口。
  • 具体聚合(ConcreteAggregate):实现了聚合接口,并创建了迭代器对象。
  • 具体迭代器(ConcreteIterator):实现了迭代器接口,并定义了具体的遍历算法。

迭代器模式的实现如下:

// 聚合
public interface Aggregate {
  Iterator iterator();
}

// 迭代器
public interface Iterator {
  boolean hasNext();
  Object next();
}

// 具体聚合
public class ConcreteAggregate implements Aggregate {
  private List<Object> list = new ArrayList<>();

  public void add(Object obj) {
    list.add(obj);
  }

  public Iterator iterator() {
    return new ConcreteIterator(this);
  }
}

// 具体迭代器
public class ConcreteIterator implements Iterator {
  private ConcreteAggregate aggregate;
  private int index = 0;

  public ConcreteIterator(ConcreteAggregate aggregate) {
    this.aggregate = aggregate;
  }

  @Override
  public boolean hasNext() {
    return index < aggregate.list.size();
  }

  @Override
  public Object next() {
    return aggregate.list.get(index++);
  }
}

public class Main {
  public static void main(String[] args) {
    // 创建聚合
    Aggregate aggregate = new ConcreteAggregate();

    // 添加元素
    aggregate.add("a");
    aggregate.add("b");
    aggregate.add("c");

    // 获取迭代器
    Iterator iterator = aggregate.iterator();

    // 遍历元素
    while (iterator.hasNext()) {
      System.out.println(iterator.next());
    }
  }
}

迭代器模式的优点如下:

  • 封装了遍历算法,提高了聚合对象的封装性。
  • 简化了客户端代码,客户端只需关注如何获取迭代器对象即可。
  • 提高了聚合对象的扩展性,可以根据需要添加新的遍历算法。

迭代器模式的应用场景如下:

  • 需要访问一个聚合对象的内部元素时。
  • 需要对聚合对象的内部元素进行遍历时。
  • 需要提高聚合对象的封装性和扩展性时。

迭代器模式的注意事项如下:

  • 迭代器模式的实现需要考虑聚合对象的结构,以便迭代器能够正确地遍历聚合对象的内部元素。
  • 迭代器模式可以与其他模式结合使用,例如与适配器模式结合使用,可以将一个聚合对象的迭代器接口转换成另一个接口。