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 相关文章推荐
jQuery 相关控件的事件操作分解
Aug 03 Javascript
js 巧妙去除数组中的重复项
Jan 25 Javascript
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
Aug 14 Javascript
jQuery DOM操作实例
Mar 05 Javascript
JavaScript继承学习笔记【新手必看】
May 10 Javascript
Angular 理解module和injector,即依赖注入
Sep 07 Javascript
微信小程序 地图定位简单实例
Oct 14 Javascript
Angular 2父子组件数据传递之@ViewChild获取子组件详解
Jul 04 Javascript
JavaScript全屏和退出全屏事件总结(附代码)
Aug 17 Javascript
JavaScript 中Date对象的格式化代码方法汇总
Sep 06 Javascript
AngularJS 应用模块化的使用
Apr 04 Javascript
vue el-upload上传文件的示例代码
Dec 21 Vue.js
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
人尽可用的Windows技巧小贴士之下篇
2007/03/22 PHP
提升PHP性能的21种方法介绍
2013/06/25 PHP
PHP中使用FFMPEG获取视频缩略图和视频总时长实例
2014/05/04 PHP
php实现zip压缩文件解压缩代码分享(简单易懂)
2014/05/10 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
2015/12/16 PHP
php + nginx项目中的权限详解
2017/05/23 PHP
Thinkphp自定义生成缩略图尺寸的方法
2019/08/05 PHP
DWZ刷新dialog解决方法
2013/03/03 Javascript
JavaScript跨域方法汇总
2014/10/16 Javascript
使用script的src实现跨域和类似ajax效果
2014/11/10 Javascript
一款基于jQuery的图片场景标注提示弹窗特效
2015/01/05 Javascript
每天一篇javascript学习小结(RegExp对象)
2015/11/17 Javascript
jQuery插件FusionWidgets实现的Bulb图效果示例【附demo源码下载】
2017/03/23 jQuery
Angular中$state.go页面跳转并传递参数的方法
2017/05/09 Javascript
基于JS实现限时抢购倒计时间表代码
2017/05/09 Javascript
JS实现网页抢购功能(触发,终止脚本)
2017/11/27 Javascript
17道题让你彻底理解JS中的类型转换
2019/08/08 Javascript
小程序富文本提取图片可放大缩小
2020/05/26 Javascript
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
Python和JavaScript间代码转换的4个工具
2016/02/22 Python
python安装教程
2018/02/28 Python
有关Python的22个编程技巧
2018/08/29 Python
python实现控制台打印的方法
2019/01/12 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
2019/06/17 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
2019/06/21 Python
Win10下Python3.7.3安装教程图解
2019/07/08 Python
html5中 media(播放器)的api使用指南
2014/12/26 HTML / CSS
韩国著名的在线综合购物网站:Akmall
2016/08/07 全球购物
医学专业个人求职自荐信格式
2013/09/23 职场文书
一年级语文教学反思
2014/02/13 职场文书
放飞梦想演讲稿600字
2014/08/26 职场文书
创先争优承诺书
2015/01/20 职场文书
谢师宴家长致辞
2015/07/27 职场文书
婚宴父亲致辞
2015/07/27 职场文书
工作后的感想
2015/08/07 职场文书
MySQL和Oracle批量插入SQL的通用写法示例
2021/11/17 MySQL