迭代器模式

迭代器模式

原理

  指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示

用途

  可以把迭代的过程业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象的内部构造,也可以按顺序访问其中的每个元素。

内部迭代器

  外界不用关心迭代器内部的实现,跟`迭代器的交互也仅仅是一次初始调用`,但这也刚好是内部迭代器的缺点。由于`内部迭代器的迭代规则已经被提前规定`

外部迭代器

  必须显式地请求迭代下一个元素。但它的适用面更广,也能满足更多变的需求

  迭代类数组对象和字面量对象、倒序迭代器、中止迭代器

/**
 * 模拟each的函数(内部迭代器的简单实现)
 * @param     {[type]}   arr      需要循环的数组
 * @param     {Function} callback 循环后需要触发的回调
 */
function each(arr, callback) {
  arr.forEach((item, i) => {
    callback.call(item, item, i);
  });
}
/**
 * 外部迭代器的简单实现
 * @date      2018-10-18
 * @param     {[type]}   obj  传入的对象
 */
function outIterator(obj) {
  let currentIndex = 0; // 当前进行到第几个
  let next = () => {
    currentIndex++;
  };
  let isDone = () => {
    // 是否已经完成
    return currentIndex >= obj.length;
  };
  let getItem = function() {
    return obj[currentIndex];
  };
  return {
    getItem,
    next,
    isDone
  };
}

function compare(arr1, arr2) {
  while (!arr1.isDone() && !arr2.isDone()) {
    if (arr1.getItem() !== arr2.getItem()) {
      throw new Error("不相等");
    }
    arr1.next();
    arr2.next();
  }
  alert("相等");
}
// 实例计算两个数组是否一样
let oneOutIterator = outIterator([1, 2, 3]);
let twoOutIterator = outIterator([1, 2, 3]);
// compare(oneOutIterator,twoOutIterator);

  转载请注明: 迷一样的自信 迭代器模式

 上一篇
单例模式 单例模式
单例模式原理  判断是否有这个实例,没有就创建,有就返回它的实例 用途  在整个过程中只需要一个对象,并提供全局的访问 /** * 非透明的单例 * @describe: 没有显示的new,使用者并不知道这是一个类 */ functi
2018-06-06
下一篇 
发布-订阅者模式 发布-订阅者模式
发布-订阅者模式原理  它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。 优点 时间上的解耦 对象之间的解耦 缺点 创建订阅者本身要消耗一定的时间和内存 对象与对象之间的必要联系难以跟踪与维
2018-06-04
  目录