• 前端设计模式之【迭代器模式】


    前言

    hello world欢迎来到前端的新世界


    😜当前文章系列专栏:前端设计模式
    🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误,感谢大家指出)🌹
    💖感谢大家支持!您的观看就是作者创作的动力

    介绍

    迭代器模式是一种行为设计模式,它允许你在不暴露集合内部结构的情况下遍历集合中的元素。这种模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。

    迭代器模式主要包括两个角色:迭代器(Iterator)和可迭代对象(Iterable)。迭代器是负责定义访问和遍历元素的接口,而可迭代对象则是具体的集合或容器,它提供了创建迭代器的方法,并且可以被迭代器按照一定规则遍历其中的元素。

    通过迭代器模式,我们可以将对集合元素的操作与集合本身分离开来,使得遍历方式可以独立于集合进行变化。这样一来,无论是数组、链表还是其他类型的集合,都可以通过相同的迭代器接口进行遍历,从而提高了代码的可重用性和灵活性。

    实现接口

    一个迭代器通常需要实现以下接口:

    • hasNext():判断迭代是否结束,返回Boolean
    • next():查找并返回下一个元素
      为Javascript的数组实现一个迭代器可以这么写:
    const item = [1, 'red', false, 3.14];
    
    function Iterator(items) {
      this.items = items;
      this.index = 0;
    }
    
    Iterator.prototype = {
      hasNext: function () {
        return this.index < this.items.length;
      },
      next: function () {
        return this.items[this.index++];
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    验证一下迭代器是否工作:

    const iterator = new Iterator(item);
    
    while(iterator.hasNext()){
      console.log(iterator.next());
    }
    //输出:1, red, false, 3.14
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    ES6提供了更简单的迭代循环语法 for…of,使用该语法的前提是操作对象需要实现 可迭代协议(The iterable protocol),简单说就是该对象有个Key为 Symbol.iterator 的方法,该方法返回一个iterator对象。

    比如我们实现一个 Range 类用于在某个数字区间进行迭代:

    function Range(start, end) {
      return {
        [Symbol.iterator]: function () {
          return {
            next() {
              if (start < end) {
                return { value: start++, done: false };
              }
              return { done: true, value: end };
            }
          }
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    验证一下:

    for (num of Range(1, 5)) {
      console.log(num);
    }
    // 输出:1, 2, 3, 4
     
    
    • 1
    • 2
    • 3
    • 4
    • 5

    优缺点

    优点:

    • 分离集合对象与遍历行为:迭代器模式能够将集合对象与遍历行为分离,使得可以独立地改变集合对象的遍历方式。
    • 统一遍历接口:迭代器模式提供了统一的遍历接口,使得客户端代码可以以相同的方式访问不同类型的集合对象。
    • 支持逆向遍历:一些迭代器模式的实现还支持逆向遍历,这使得对集合元素的访问更加灵活。
    • 支持延迟加载:有些情况下,集合对象可能包含大量的元素,而并不是每次都需要遍历所有元素,迭代器模式可以支持延迟加载,只在需要时才获取元素,从而节省资源。

    缺点:

    • 增加了复杂度:在一些简单的应用场景下,使用迭代器模式可能会增加代码的复杂度,使得代码难以理解。
    • 内存占用:在某些语言或环境中,迭代器可能会占用额外的内存空间。

    应用场景

    需要遍历不同类型集合对象的场景:如果系统需要统一遍历不同类型的集合对象,迭代器模式可以提供一个统一的遍历接口。
    需要隐藏集合内部结构的场景:当希望遍历集合对象而又不暴露其内部结构时,可以使用迭代器模式。
    支持逆向遍历的场景:如果需要对集合进行逆向遍历,迭代器模式提供了灵活的解决方案。

    后言

    创作不易,要是本文章对广大读者有那么一点点帮助 不妨三连支持一下,您的鼓励就是博主创作的动力

  • 相关阅读:
    可扩展标记语言-----XML
    【全国计算机二级】python的jieba模块,你真的了解吗?
    HTML 简介
    程序化广告还有未来么?(4/5)——程序化领域变化的底层逻辑和反思
    【笔记】元素水平滑动(松手查看更多、滑动回弹)
    五、指令(2)
    Okaleido生态核心权益OKA,尽在聚变Mining模式
    最新全国省市区县乡镇街道行政区划数据提取(2022年)
    软件测试框架的面试题讲解
    如何使用并查集解决朋友圈问题?
  • 原文地址:https://blog.csdn.net/weixin_68537796/article/details/134339418