迭代器模式

69 阅读1分钟

迭代器模式 实践

class DataIterator<T> {
  private data: T[];
  private index = 0;
  constructor(container: DataContainer<T>) {
    this.data = container.data;
  }

  next(): T | null {
    if (this.hasNext()) return this.data[this.index++];
    return null;
  }

  hasNext(): boolean {
    return this.index < this.data.length;
  }
}

class DataContainer<T> {
  data: T[];
  constructor(data: T[]) {
    this.data = data;
  }
  getIterator() {
    return new DataIterator<T>(this);
  }
}

const dataContainer = new DataContainer<number>([1, 2, 3]);
const iterator = dataContainer.getIterator();
while (iterator.hasNext()) {
  console.log(iterator.next());
}

const dataContainer2 = new DataContainer<string>(["a", "b", "c"]);
const iterator2 = dataContainer2.getIterator();
while (iterator2.hasNext()) {
  console.log(iterator2.next());
}
interface IPerson {
  name: string;
  age: number;
}
const p1: IPerson = {
  name: "张三",
  age: 22,
};
const p2: IPerson = {
  name: "李四",
  age: 44,
};
const dataContainer3 = new DataContainer<IPerson>([p1, p2]);
const iterator3 = dataContainer3.getIterator();
while (iterator3.hasNext()) {
  console.log(iterator3.next());
}