JavaScript设计模型Iterator实例解析


Posted in Javascript onJanuary 22, 2020

这篇文章主要介绍了JavaScript设计模型Iterator实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

Iterator Pattern是一个很重要也很简单的Pattern:迭代器!
我们可以提供一个统一入口的迭代器,Client只需要知道有哪些方法,或是有哪些Concrete Iterator,并不需要知道他们底层如何实作!现在就让我们来开始吧!

起手式

Iterator最主要的东西就是两个:hasNext、next。要让Client知道是否还有下一个,和切换到下一个!

定义Interface

interface IteratorInterface {
  index: number
  dataStorage: any
  hasNext(): boolean
  next(): any
  addItem(item: any): void
}

实作介面

下面的范例我将会使用Map、Array这两个常见的介面实作。

class iterator1 implements IteratorInterface {
  index: number
  dataStorage: any[]
  constructor() {
    this.index = 0
    this.dataStorage = []
  }
  hasNext(): boolean {
    return this.dataStorage.length > this.index
  }
  next(): any {
    return this.dataStorage[this.index ++]
  }
  addItem(item: any): void {
    this.dataStorage.push(item)
  }
}
// map
class iterator2 implements IteratorInterface {
  index: number
  dataStorage: Map<number, any>
  constructor() {
    this.index = 0
    this.dataStorage = new Map<number, any>()
  }
  hasNext(): boolean {
    return this.dataStorage.get(this.index) != undefined
  }
  next(): any {
    return this.dataStorage.get(this.index ++)
  }
  addItem(item: any): void {
    this.dataStorage.set(this.dataStorage.size, item)
  }
}

Client

我没有实作一个Client,所以我是直接new一个类别出来直接使用!

const i = new iterator1()
i.addItem(123)
i.addItem(456)
i.addItem('dolphin')
while(i.hasNext()){
  console.log(i.next())
}
console.log(`====================`)
const i2 = new iterator2()
i2.addItem(123)
i2.addItem(456)
i2.addItem('dolphin')
while(i2.hasNext()){
  console.log(i2.next())
}

结论

会发现Iterator 1号 2号的结果都是一样的!他们都只需要让Client知道有hasNext、next就好,底层的实作不需要让他们知道!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
密码框显示提示文字jquery示例
Aug 29 Javascript
jQuery表单域选择器用法分析
Feb 10 Javascript
jQuery实现图片加载完成后改变图片大小的方法
Mar 29 Javascript
让你一句话理解闭包(简单易懂)
Jun 03 Javascript
Vue.js手风琴菜单组件开发实例
May 16 Javascript
Angular 2父子组件数据传递之局部变量获取子组件其他成员
Jul 04 Javascript
详解使用Node.js 将txt文件转为Excel文件
Jul 05 Javascript
Node.js文件编码格式的转换的方法
Apr 27 Javascript
jQuery+PHP实现上传裁剪图片
Jun 29 jQuery
AngularJS实现的自定义过滤器简单示例
Feb 02 Javascript
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
Jul 15 Javascript
解决antd 下拉框 input [defaultValue] 的值的问题
Oct 31 Javascript
Vue开发环境跨域访问问题
Jan 22 #Javascript
vue中英文切换实例代码
Jan 21 #Javascript
微信小程序点击view动态添加样式过程解析
Jan 21 #Javascript
微信小程序如何实现radio单选框单击打勾和取消
Jan 21 #Javascript
微信小程序仿淘宝热搜词在搜索框中轮播功能
Jan 21 #Javascript
微信小程序swiper实现文字纵向轮播提示效果
Jan 21 #Javascript
jquery将信息遍历到界面上实例代码
Jan 21 #jQuery
You might like
二次元帅气男生排行榜,只想悄悄收藏系列
2020/03/04 日漫
php上的memcache和memcached两个pecl库
2010/03/29 PHP
php中使用redis队列操作实例代码
2013/02/07 PHP
php 修改、增加xml结点属性的实现代码
2013/10/22 PHP
解密ThinkPHP3.1.2版本之模板继承
2014/06/19 PHP
php7安装yar扩展的方法详解
2017/08/03 PHP
对联广告js flash激活
2006/10/19 Javascript
Prototype使用指南之range.js
2007/01/10 Javascript
JQuery toggle使用分析
2009/11/16 Javascript
Javascript和Ajax中文乱码吐血版解决方案
2009/12/21 Javascript
js以对象为索引的关联数组
2010/07/04 Javascript
JavaScript版DateAdd和DateDiff函数代码
2012/03/01 Javascript
JavaScript实现自动消除按钮功能的方法
2015/08/05 Javascript
AngularJS过滤器详解及示例代码
2016/08/16 Javascript
js拼接html字符串的注意事项
2016/10/13 Javascript
数组Array的排序sort方法
2017/02/17 Javascript
AngularJS入门教程一:路由用法初探
2017/05/27 Javascript
使用Three.js实现太阳系八大行星的自转公转示例代码
2019/04/09 Javascript
VUE Elemen-ui之穿梭框使用方法详解
2021/01/19 Javascript
使用Vant完成Dialog弹框案例
2020/11/11 Javascript
Python多线程编程(五):死锁的形成
2015/04/05 Python
快速入门python学习笔记
2017/12/06 Python
200 行python 代码实现 2048 游戏
2018/01/12 Python
Python理解递归的方法总结
2019/01/28 Python
对Python的多进程锁的使用方法详解
2019/02/18 Python
python3中替换python2中cmp函数的实现
2019/08/20 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
2019/12/23 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
python中Django文件上传方法详解
2020/08/05 Python
全球最大的在线橄榄球商店:Lovell Rugby
2018/05/20 全球购物
中秋节超市促销方案
2014/01/30 职场文书
乡镇领导干部个人对照检查材料思想汇报
2014/09/23 职场文书
2014基层党员批评与自我批评范文
2014/09/24 职场文书
银行竞聘报告范文
2014/11/06 职场文书
2016公司年会主持词
2015/07/01 职场文书
大学社团活动总结怎么写
2019/06/21 职场文书