# 设计模式:迭代器模式

# 什么是迭代器模式

迭代器模式是提供一种方法顺序访问一个聚合对象中的每个元素,同时还不暴露对象内部结构(单一职责原则)。

比如数组的 Array.prototype.forEach() 就是数组对象的迭代器。

# Coding

内部迭代器

为对象增加迭代的方法,外部只用调用一次

Array.prototype.forEach 函数就典型的内部迭代器,咱们也可以实现一个类似这样的。

// 定义数组
var a = [11,22,3]
// 实现内部迭代器
a.each = function(fn) {
  for (let i = 0; i < this.length; i++) {
    fn(a[i], this)
  }
}
// 调用内部迭代器
a.each(function(i, list) {
  console.log(i, list);
});

外部迭代器

用户必须手动的请求迭代下一个元素,比如 xx.next()

var Iterator = function(obj) {
  var current = 0;
  var next = function() {
    current += 1;
  }
  var isDone = function() {
    return current >= obj.length;
  }
  var getCurrentItem = function() {
    return obj[current];
  }
  return {
    next,
    isDone,
    getCurrentItem
  }
}

let iterator_1 = Iterator([11,22,33]);

while(!iterator_1.isDone()){
  console.log(
    iterator_1.getCurrentItem()
  )
  // 必须手动调用 next 函数,让指针指向下一个元素。
  iterator_1.next();
}

# 总结

迭代器模式是一种相对简单的模式,简单到很多时候我们都不认为它是一种设计模式。目前 的绝大部分语言都内置了迭代器。

上次更新: 9/8/2020, 3:29:04 PM