Skip to content

迭代器模式

迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。

示意图

alt text

示例代码

ts
interface Iterator<T> {
  first(): T;
  currentItem(): T;
  next(): T;
  isDone(): boolean;
}

class ConcreteIterator implements Iterator<number> {
  private index: number;

  constructor(private items: Array<number>) {
    this.index = 0;
  }

  first(): number {
    return this.items[0];
  }

  currentItem(): number {
    return this.items[this.index];
  }

  next(): number {
    const retVal = this.items[this.index];

    this.index += 1;

    return retVal;
  }

  isDone(): boolean {
    return this.index >= this.items.length;
  }
}
interface Iterator<T> {
  first(): T;
  currentItem(): T;
  next(): T;
  isDone(): boolean;
}

class ConcreteIterator implements Iterator<number> {
  private index: number;

  constructor(private items: Array<number>) {
    this.index = 0;
  }

  first(): number {
    return this.items[0];
  }

  currentItem(): number {
    return this.items[this.index];
  }

  next(): number {
    const retVal = this.items[this.index];

    this.index += 1;

    return retVal;
  }

  isDone(): boolean {
    return this.index >= this.items.length;
  }
}

优缺点

优点

  • 访问一个聚合对象的内容而无需暴露它的内部表示。
  • 为遍历不同的聚合结构提供一个统一的接口(即支持多态迭代)。

缺点

  • 遍历的同时更改聚合对象可能会引发问题。
  • 对于某些特殊集合,使用迭代器可能比直接遍历的效率低。

使用场景

  • 当集合背后为复杂的数据结构,且希望对客户端隐藏其复杂性时(出于使用便利性或安全性的考虑),可以使用迭代器模式。

Developed by Kisstar & Powered by VitePress.