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的ajax请求全面了解
Mar 20 Javascript
简易js代码实现计算器操作
Apr 15 Javascript
JQuery写动态树示例代码
Jul 31 Javascript
js实现兼容IE和FF的上下层的移动
May 04 Javascript
jquery实现带缩略图的可定制高度画廊效果(5种)
Aug 28 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
Jan 04 Javascript
jQuery获取某天的农历日期并判断是否除夕或新年的方法
Mar 01 Javascript
jQuery实例—选项卡的简单实现(js源码和jQuery)
Jun 14 Javascript
在Vue项目中引入腾讯验证码服务的教程
Apr 03 Javascript
js实现简单模态框实例
Nov 16 Javascript
JS中的算法与数据结构之栈(Stack)实例详解
Aug 20 Javascript
vue前端和Django后端如何查询一定时间段内的数据
Feb 28 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
php 5.3.5安装memcache注意事项小结
2011/04/12 PHP
php替换超长文本中的特殊字符的函数代码
2012/05/22 PHP
全面解析PHP操作Memcache基本函数
2016/07/14 PHP
PHP程序员必须知道的两种日志实例分析
2020/05/14 PHP
基于PHP实现短信验证码发送次数限制
2020/07/11 PHP
地址栏上的一段语句,改变页面的风格。(教程)
2008/04/02 Javascript
jquery 事件冒泡的介绍以及如何阻止事件冒泡
2012/12/25 Javascript
关于textarea提交的内容无法换行的解决办法
2013/04/09 Javascript
String.prototype实现的一些javascript函数介绍
2013/11/22 Javascript
jQuery的缓存机制浅析
2014/06/07 Javascript
如何编写高质量JS代码(续)
2015/02/25 Javascript
javascript动态创建链接的方法
2015/05/13 Javascript
jQuery实现按钮只点击一次后就取消点击事件绑定的方法
2015/06/26 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
2016/02/25 Javascript
bootstrap配合Masonry插件实现瀑布式布局
2017/01/18 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
2017/05/11 Javascript
JS分页的实现(同步与异步)
2017/09/16 Javascript
解决element UI 自定义传参的问题
2018/08/22 Javascript
使用Python制作获取网站目录的图形化程序
2015/05/04 Python
PyQt5每天必学之工具提示功能
2018/04/19 Python
python远程连接服务器MySQL数据库
2018/07/02 Python
Python完成毫秒级抢淘宝大单功能
2019/06/06 Python
Python3实现发送邮件和发送短信验证码功能
2020/01/07 Python
解决django FileFIELD的编码问题
2020/03/30 Python
Python3之外部文件调用Django程序操作model等文件实现方式
2020/04/07 Python
python中列表的含义及用法
2020/05/26 Python
使用Python解析Chrome浏览器书签的示例
2020/11/13 Python
阿迪达斯芬兰官方网站:adidas芬兰
2017/01/30 全球购物
DC Shoes澳大利亚官方网上商店:购买DC鞋子
2019/10/25 全球购物
《理想的风筝》教学反思
2014/04/11 职场文书
小学生环保标语
2014/06/13 职场文书
见习报告的格式
2014/10/31 职场文书
食品安全主题班会
2015/08/13 职场文书
pytorch实现ResNet结构的实例代码
2021/05/17 Python
如何在C++中调用Python
2021/05/21 Python
python基础之错误和异常处理
2021/10/24 Python