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之end()和pushStack()使用介绍
Feb 07 Javascript
跨浏览器的事件对象介绍
Jun 27 Javascript
jQuery:节点(插入,复制,替换,删除)操作
Mar 04 Javascript
封装好的一个万能检测表单的方法
Jan 21 Javascript
javascript动态创建表格及添加数据实例详解
May 13 Javascript
基于JavaScript实现生成名片、链接等二维码
Sep 20 Javascript
jQuery实现联动下拉列表查询框
Jan 04 Javascript
小程序开发基础之view视图容器
Aug 21 Javascript
在React项目中使用Eslint代码检查工具及常见问题
Oct 10 Javascript
微信小程序实现工作时间段选择
Feb 15 Javascript
js纯前端实现腾讯cos文件上传功能的示例代码
May 14 Javascript
JS 基本概念详细介绍
Oct 16 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
PHP使用in_array函数检查数组中是否存在某个值
2015/03/25 PHP
PHP利用APC模块实现大文件上传进度条的方法
2015/10/29 PHP
thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法
2016/09/30 PHP
CI框架使用composer安装的依赖包步骤与方法分析
2016/11/21 PHP
PHP实现通过二维数组键值获取一维键名操作示例
2019/10/11 PHP
JavaScript 变量命名规则
2009/09/23 Javascript
JSON 编辑器实现代码
2009/12/06 Javascript
Javascript 网页水印(非图片水印)实现代码
2010/03/01 Javascript
javascript面向对象编程(一) 实例代码
2010/06/25 Javascript
将string解析为json的几种方式小结
2010/11/11 Javascript
基于jquery的获取浏览器窗口大小的代码
2011/03/28 Javascript
jQuery弹出(alert)select选择的值
2013/04/21 Javascript
Flexigrid在IE下不显示数据的处理的解决方法
2013/10/24 Javascript
JSON中双引号的轮回使用过程中一定要小心
2014/03/05 Javascript
javascript中不提供sleep功能如何实现这个功能
2014/05/27 Javascript
window.location.reload 刷新使用分析(去对话框)
2015/11/11 Javascript
如何利用模板将HTML从JavaScript中抽离
2016/10/08 Javascript
jQuery居中元素scrollleft计算方法示例
2017/01/16 Javascript
Vue的Class与Style绑定的方法
2017/09/01 Javascript
JS实现自定义状态栏动画文字效果示例
2017/10/12 Javascript
Vue组件之高德地图地址选择功能的实例代码
2019/06/21 Javascript
极简的Python入门指引
2015/04/01 Python
Django 如何获取前端发送的头文件详解(推荐)
2017/08/15 Python
python决策树之C4.5算法详解
2017/12/20 Python
python对list中的每个元素进行某种操作的方法
2018/06/29 Python
Python实现常见的回文字符串算法
2018/11/14 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
2020/02/10 Python
Python常驻任务实现接收外界参数代码解析
2020/07/21 Python
Molton Brown美国官网:奢华美容、香水、沐浴和身体护理
2020/09/02 全球购物
工程地质勘察专业大学生求职信
2013/10/13 职场文书
法人代表委托书
2014/04/04 职场文书
2014年小学生迎国庆65周年演讲稿
2014/09/27 职场文书
解除劳动合同通知书范本
2015/04/16 职场文书
社区党员干部承诺书
2015/05/04 职场文书
工作简报格式范文
2015/07/21 职场文书