Skip to content

迭代器模式

迭代器模式(Iterator Pattern)是一种行为设计模式,它提供了一种方法来顺序访问一个集合对象中的元素,而不暴露该对象的内部表示。

迭代器模式包含以下几个主要部分:

1、 迭代器(Iterator):提供访问和遍历集合成员的接口,一般包括next()hasNext()等方法。

2、 具体迭代器(Concrete Iterator):实现迭代器接口,维护对集合的引用,并实现具体的遍历逻辑。

3、 聚合容器(Aggregate):定义创建迭代器的接口,通常包括一个makeIterator()方法,用于返回一个迭代器对象。

4、 具体聚合类(Concrete Aggregate):实现聚合接口,维护集合的内部数据结构,并返回具体的迭代器实例。

代码实现:

typescript
abstract class ITerator<T> {
  abstract next: () => { value: T; done: boolean }
}

abstract class IAggregator {
  public container: any[]
  abstract push: (member: string) => void
  abstract make: () => ITerator<string>
}

//实现对聚合类的内部的数据集合进行迭代
class ConcreteITerator implements ITerator<string> {
  private i = -1
  private aggregator: IAggregator

  constructor(aggregator: IAggregator) {
    this.aggregator = aggregator
  }
  /**
   * 迭代聚合类的成员
   * @returns
   */
  next() {
    const lastIndex = this.aggregator.container.length - 1
    //边界限定
    if (this.i >= lastIndex) this.i = lastIndex
    //取值
    const value = this.aggregator.container[++this.i]
    return {
      value,
      done: this.i >= lastIndex,
    }
  }
}

//具体的聚合类
class ConcreteIaggregator implements IAggregator {
  //存储元素的容器
  public container: string[] = []
  /**
   * 向容器中存放元素
   * @param member
   */
  public push(member: string) {
    this.container.push(member)
  }
  /**
   * 创建迭代器,对内部的容器的遍历由迭代器完成
   * @returns
   */
  public make() {
    return new ConcreteITerator(this)
  }
}

const $aggregator = new ConcreteIaggregator()
$aggregator.push('eddie')
$aggregator.push('hubsky')

const $iterator = $aggregator.make()
console.log($iterator.next())
console.log($iterator.next())