# 迭代器模式

迭代器模式(Iterator Pattern)是最简单的设计模式之一。它可以让用户透过特定的接口访问容器中的每一个元素而不用了解底层的实现。

迭代器模式属于行为型模式。

# UML 类图

# 传统的 Java 类图

iterator-pattern.png

# JavaScript 类图

js-iterator-pattern.png

# 作用

不同的方式来遍历整个整合对象。

# 优缺点

# 优点

  • 支持以不同的方式遍历一个聚合对象。

  • 迭代器简化了聚合类。

  • 在同一个聚合上可以有多个遍历。

  • 在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。

# 缺点

  • 由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性

# 场景

# 实现代码

/*
 * @Author: Rainy
 * @Date: 2019-11-14 19:25:01
 * @LastEditors: Rainy
 * @LastEditTime: 2019-12-12 20:29:44
 */

import { NumberArrayMap } from 'types'

class Container {
  list: NumberArrayMap;

  constructor(list: NumberArrayMap) {
    this.list = list
  }

  getIterator(): Iterator {
    return new Iterator(this);
  }
}

class Iterator {
  private _list: NumberArrayMap;
  private _index: number;

  constructor(container: Container) {
    this._index = 0;
    this._list = container.list;
  }

  next(): number | null {
    if (this.hasNext()) {
      return this._list[this._index++];
    }
    return null;
  }

  hasNext(): boolean {
    return this._index >= this._list.length;
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

# 参考

迭代器模式 (opens new window)