你不知道的javascript设计模式(七)---- 迭代器模式

简介: 你不知道的javascript设计模式(七)---- 迭代器模式

前言

       这两天收到很多读者的回复评论,对我的鼓舞很大,大家可以从我的博客中提高就是对我最大的支持!言归正传,上一章我们谈到了策略模式,用于一些可以通过不同算法达到相同目的的场景,分离了算法本身和算法执行的部分,来保证设计模式的单一职责原则。这一章,我们将来学习关于迭代器模式的相关内容


正文

迭代器模式的定义

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

       前面我们说过,每一种设计模式的核心原理都是分离业务逻辑中不变和易变的部分,来让各个部分维持单一的职责。迭代器模式就是把迭代的过程从业务逻辑分离出来,这样可以使得,在使用迭代器模式以后,即使不关心对象的内部构造,也可以按顺序访问其中的每个元素

       其实迭代器模式是一种很常见而且我们不知不觉已经用过很多次的模式了,像Array原型方法中的forEach和es6中实现的iterator对象都是迭代器模式的体现


js的迭代器

       迭代器分为内部迭代器和外部迭代器,这里我们将分别进行介绍


内部迭代器

       内部迭代器函数往往在内部就已经定义了迭代了规则,它完全负责了整个迭代过程,外部只需要调用一次就可以完成迭代,比如下面的例子:

       each函数会迭代传进来的数组对象,并且把下标和数组迭代对象的值传给回调函数。所以我们可以发现,对于内部迭代器而言,调用的过程是很方便的,外界不需要关注迭代器的实现,只需要在初始调用的时候把需要的值传给迭代器就可以了。

       这是内部迭代器的优势也是它的劣势,因为已经规则好迭代规则,使得当迭代规则发生变化的时候,函数的复用性会变差,需要修改到函数本身去兼容更多的迭代方式

外部迭代器

       与之相对的就是外部迭代器,大家应该比较熟悉,Array的原型方法里有一个sort的排序函数,它基于外部迭代器实现的,我们可以传入不同的迭代规则函数给sort,来配置出不同规则的迭代器,相比内部迭代器函数调用略复杂,但是灵活性扩展了很多


用js实现迭代器对象

       迭代器对象其实在es6中已经实现了,但是这里还是给大家写一遍简易的迭代器对象,方便大家加深对迭代器对象的印象,迭代器对象应该满足几个要素:

  • currentIndex,迭代器对象应该至少是一个类数组形式,也就是实现了length属性,具有迭代的index
  • next方法,具有向下一个迭代对象递推的能力
  • isDone方法,用来判断迭代是否结束,达到迭代终点
  • getCurrentItem方法,用来获取迭代过程中的当前值

小结

       这一章我们细谈了迭代器模式,这个其实在很多语言里都已经进行了实现,在设计模式中是一种相对简单的设计模式,简单到我们平时甚至天天使用但是却没意识到这是一种设计模式。下一章节我们将进一步学习一种新的,大家耳熟能详的设计模式,发布-订阅模式。

       小伙伴们今天的学习就到这里了,如果觉得本文对你有帮助的话,欢迎转发,评论,收藏,点赞!!!

目录
相关文章
|
3月前
|
设计模式 JavaScript 前端开发
js设计模式【详解】—— 职责链模式
js设计模式【详解】—— 职责链模式
67 8
|
9天前
|
设计模式 安全 Java
Java设计模式-迭代器模式(21)
Java设计模式-迭代器模式(21)
|
2月前
|
设计模式 JavaScript 前端开发
从工厂到单例再到策略:Vue.js高效应用JavaScript设计模式
【8月更文挑战第30天】在现代Web开发中,结合使用JavaScript设计模式与框架如Vue.js能显著提升代码质量和项目的可维护性。本文探讨了常见JavaScript设计模式及其在Vue.js中的应用。通过具体示例介绍了工厂模式、单例模式和策略模式的应用场景及其实现方法。例如,工厂模式通过`NavFactory`根据用户角色动态创建不同的导航栏组件;单例模式则通过全局事件总线`eventBus`实现跨组件通信;策略模式用于处理不同的表单验证规则。这些设计模式的应用不仅提高了代码的复用性和灵活性,还增强了Vue应用的整体质量。
21 0
|
2月前
|
设计模式 JavaScript 前端开发
小白请看 JS大项目宝典:设计模式 教你如何追到心仪的女神
小白请看 JS大项目宝典:设计模式 教你如何追到心仪的女神
|
3月前
|
设计模式 JavaScript Go
js设计模式【详解】—— 状态模式
js设计模式【详解】—— 状态模式
46 7
|
3月前
|
设计模式 JavaScript
js设计模式【详解】—— 桥接模式
js设计模式【详解】—— 桥接模式
52 6
|
3月前
|
设计模式 JavaScript
js设计模式【详解】—— 原型模式
js设计模式【详解】—— 原型模式
42 6
|
3月前
|
设计模式 JavaScript 算法
js设计模式【详解】—— 模板方法模式
js设计模式【详解】—— 模板方法模式
41 6
|
3月前
|
存储 NoSQL Go
iLogtail设计模式问题之迭代器模式是如何应用的
iLogtail设计模式问题之迭代器模式是如何应用的
|
3月前
|
设计模式 JavaScript 前端开发
JavaScript进阶 - JavaScript设计模式
【7月更文挑战第7天】在软件工程中,设计模式是解决常见问题的标准解决方案。JavaScript中的工厂模式用于对象创建,但过度使用可能导致抽象过度和缺乏灵活性。单例模式确保唯一实例,但应注意避免全局状态和过度使用。观察者模式实现了一对多依赖,需警惕性能影响和循环依赖。通过理解模式的优缺点,能提升代码质量。例如,工厂模式通过`createShape`函数动态创建对象;单例模式用闭包保证唯一实例;观察者模式让主题对象通知多个观察者。设计模式的恰当运用能增强代码可维护性。
73 0
下一篇
无影云桌面