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 相关文章推荐
类似GMAIL的Ajax信息反馈显示
Feb 16 Javascript
一个javascript图片阅览组件
Nov 09 Javascript
JavaScript下通过的XMLHttpRequest发送请求的代码
Jun 28 Javascript
jquery操作select大全
Apr 25 Javascript
JS返回iframe中frameBorder属性值的方法
Apr 01 Javascript
易操作的jQuery表单提示插件
Dec 01 Javascript
详解JavaScript基于面向对象之创建对象(1)
Dec 10 Javascript
使用postMesssage()实现跨域iframe页面间的信息传递方法
Mar 29 Javascript
JavaScript简单获取页面图片原始尺寸的方法
Jun 21 Javascript
详谈javascript精度问题与调整
Jul 08 Javascript
js 显示日期时间的实例(时间过一秒加1)
Oct 25 Javascript
解决Vue-Router升级导致的Uncaught (in promise)问题
Aug 07 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
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
2009/07/01 PHP
使用session判断用户登录用户权限(超简单)
2013/06/08 PHP
超级酷和最实用的jQuery实例收集(20个)
2010/04/21 Javascript
关于Javascript与iframe的那些事儿
2013/07/04 Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
2013/11/12 Javascript
使用JavaScript 实现的人脸检测
2015/03/24 Javascript
JQuery异步提交表单与文件上传功能示例
2017/01/12 Javascript
ES6学习教程之块级作用域详解
2017/10/09 Javascript
对node.js中render和send的用法详解
2018/05/14 Javascript
Vuex 使用 v-model 配合 state的方法
2018/11/13 Javascript
通过图带你深入了解vue的响应式原理
2019/06/21 Javascript
微信小程序webview与h5通过postMessage实现实时通讯的实现
2019/08/20 Javascript
js根据后缀判断文件文件类型的代码
2020/05/09 Javascript
[39:19]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第二场 11.26
2020/11/30 DOTA
Python中的Classes和Metaclasses详解
2015/04/02 Python
新手如何快速入门Python(菜鸟必看篇)
2017/06/10 Python
python多进程读图提取特征存npy
2019/05/21 Python
python 有效的括号的实现代码示例
2019/11/11 Python
python实现与redis交互操作详解
2020/04/21 Python
Python连接mysql方法及常用参数
2020/09/01 Python
html5中监听canvas内部元素点击事件的三种方法
2019/04/28 HTML / CSS
Skyscanner波兰:廉价航班
2017/11/07 全球购物
美国特价机票专家:Airfarewatchdog
2018/01/24 全球购物
复古服装:RetroStage
2019/05/10 全球购物
贝佳斯官方网站:Borghese
2020/05/08 全球购物
财务会计实习报告体会
2013/12/20 职场文书
我的网上商城创业计划书
2013/12/26 职场文书
《李广射虎》教学反思
2014/04/27 职场文书
幼儿园家长安全责任书
2014/07/22 职场文书
先进员工事迹材料
2014/12/20 职场文书
2015年检验科工作总结
2015/04/27 职场文书
党支部考察鉴定意见
2015/06/02 职场文书
《槐乡的孩子》教学反思
2016/02/20 职场文书
2019年家电促销广告语集锦
2019/10/21 职场文书
python3实现无权最短路径的方法
2021/05/12 Python
JavaScript事件的委托(代理)的用法示例详解
2022/02/18 Javascript