javascript设计模式 ? 迭代器模式原理与用法实例分析


Posted in Javascript onApril 17, 2020

本文实例讲述了javascript设计模式 ? 迭代器模式原理与用法。分享给大家供大家参考,具体如下:

介绍:迭代器模式是一种使用频率非常高的设计模式,通过引入迭代器,可以将数据的遍历功能从聚合对象中分离出来。迭代器模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。

定义:提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。

场景:我们做一个百家姓的迭代器

示例:

function NameRepository(){
  var names = ['赵','钱','孙','李'];
 
  this.getIterator = function(){
    return new NameIterator();
  }
 
  function NameIterator(){
    var index = 0;
    //判断是否存在下一个元素
    this.hasNext = function(){
      return index < names.length;
    }
    //将游标指向第一个元素
    this.first = function(){
      index = 0;
    }
    //获取游标指向的当前元素
    this.currentItem = function(){
      return names[index];
    }
    this.next = function(){
      if(this.hasNext()){
        return names[index++]
      }
      return null;
    }
  }
}
 
var nameRepository = new NameRepository();
for(var iter = nameRepository.getIterator(); iter.hasNext();){
  console.log(iter.next())
}
// 赵
// 钱
// 孙
// 李

例子中NameIterator称为具体迭代器,它实现了对聚合对象的遍历,通过游标index来记录聚合对象当前位置,游标通常为一个表示位置的非负整数。

需要注意的是迭代器的接口设计非常重要,一方面要充分满足各种遍历操作的要求,另一方面又不能包含太多方法。

迭代器模式总结:

优点:
* 支持以不同的方式遍历一个聚合对象,在同一个聚合对象上可以定义多种遍历方式
* 迭代器简化了聚合类,原有的聚合对象不需要自行提供数据遍历方法。

缺点:
* 迭代器模式将存储数据和遍历数据的职责分离,一定程度增加了系统的复杂性
* 迭代器设计难度较大,需要充分考虑可扩展性。

适用场景:
* 访问一个聚合对象的内容而无须暴露它的内部表示。
* 需要为一个聚合对象提供多种遍历方式
* 为便利不同的聚合结构提供一个统一的接口,为不同的聚合结构实现不同的遍历方式。

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
仅IE9/10同时支持script元素的onload和onreadystatechange事件分析
Apr 27 Javascript
Javascript玩转继承(三)
May 08 Javascript
jQuery实现仿QQ在线客服效果的滚动层代码
Oct 15 Javascript
js从外部获取图片的实现方法
Aug 05 Javascript
JavaScript 中有关数组对象的方法(详解)
Aug 15 Javascript
vue v-model表单控件绑定详解
May 17 Javascript
JS设计模式之数据访问对象模式的实例讲解
Sep 30 Javascript
javascript与PHP动态往类中添加方法对比
Mar 21 Javascript
关于vue编译版本引入的问题的解决
Sep 17 Javascript
浅析vue插槽和作用域插槽的理解
Apr 22 Javascript
Jquery实现获取子元素的方法分析
Aug 24 jQuery
详解如何在Vue项目中发送jsonp请求
Oct 25 Javascript
vue制作抓娃娃机的示例代码
Apr 17 #Javascript
Vue+tracking.js 实现前端人脸检测功能
Apr 16 #Javascript
tracking.js实现前端人脸识别功能
Apr 16 #Javascript
electron 如何将任意资源打包的方法步骤
Apr 16 #Javascript
vue中keep-alive内置组件缓存的实例代码
Apr 16 #Javascript
详解Nuxt内导航栏的两种实现方式
Apr 16 #Javascript
javascript设计模式 ? 职责链模式原理与用法实例分析
Apr 16 #Javascript
You might like
PHP5常用函数列表(分享)
2013/06/07 PHP
PHP attributes()函数讲解
2019/02/03 PHP
终于解决了IE8不支持数组的indexOf方法
2013/04/03 Javascript
js字符串转换成xml对象并使用技巧解读
2013/04/18 Javascript
jQuery中outerWidth()方法用法实例
2015/01/19 Javascript
JavaScript中判断函数、变量是否存在
2015/06/10 Javascript
jQuery带进度条全屏图片轮播特效代码分享
2020/06/28 Javascript
JS实现的网页背景闪电闪烁效果代码
2015/10/17 Javascript
jquery实现的点击翻书效果代码
2015/11/04 Javascript
jQuery使用$.ajax提交表单完整实例
2015/12/11 Javascript
JavaScript学习总结之JS、AJAX应用
2016/01/29 Javascript
在vue中添加Echarts图表的基本使用教程
2017/11/22 Javascript
微信小程序实现留言板
2018/10/31 Javascript
JavaScript数组去重的几种方法
2019/04/07 Javascript
微信小程序引入VANT组件的方法步骤
2019/09/19 Javascript
微信小程序连续签到7天积分获得功能的示例代码
2020/08/20 Javascript
[40:10]2015国际邀请赛全明星表演赛
2015/08/07 DOTA
python结合shell查询google关键词排名的实现代码
2016/02/27 Python
深入浅析python中的多进程、多线程、协程
2016/06/22 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
如何使用selenium和requests组合实现登录页面
2020/02/03 Python
Python爬虫headers处理及网络超时问题解决方案
2020/06/19 Python
Python的logging模块基本用法
2020/12/24 Python
AmazeUI 输入框组的示例代码
2020/08/14 HTML / CSS
俄罗斯大型在线书店:Читай-город
2019/10/10 全球购物
俄罗斯宠物用品网上商店:ZooMag
2019/12/12 全球购物
医学生个人求职信范文
2013/09/24 职场文书
模具数控专业自荐信
2014/01/27 职场文书
文明学生事迹材料
2014/01/29 职场文书
境外导游求职信
2014/02/27 职场文书
初中生评语大全
2014/04/24 职场文书
硕士研究生就业推荐信
2014/05/18 职场文书
本科毕业生自荐信
2014/06/02 职场文书
邹越演讲观后感
2015/06/15 职场文书
详解如何用Python实现感知器算法
2021/06/18 Python
Django+Celery实现定时任务的示例
2021/06/23 Python