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 相关文章推荐
用javascript实现的仿Flash广告图片轮换效果
Apr 24 Javascript
JavaScript 版本自动生成文章摘要
Jul 23 Javascript
Bootstrap零基础学习第一课之模板
Jul 18 Javascript
利用bootstrapValidator验证UEditor
Sep 14 Javascript
jquery实现点击页面回到顶部
Nov 23 Javascript
js代码实现下拉菜单【推荐】
Dec 15 Javascript
详解angularJS+Ionic移动端图片上传的解决办法
Sep 13 Javascript
Layui组件Table绑定行点击事件和获取行数据的方法
Aug 19 Javascript
vue 中滚动条始终定位在底部的方法
Sep 03 Javascript
Vue2.x中利用@font-size引入字体图标报错的解决方法
Sep 28 Javascript
vue实现移动端悬浮窗效果
Dec 01 Javascript
Three.js中矩阵和向量的使用教程
Mar 19 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
jQuery使用andSelf()来包含之前的选择集
2014/05/19 Javascript
javascript结合fileReader 实现上传图片
2015/01/30 Javascript
JavaScript分页功能的实现方法
2015/04/25 Javascript
JS模式之简单的订阅者和发布者模式完整实例
2015/06/30 Javascript
JavaScript实现斗地主游戏的思路
2016/02/29 Javascript
JS正则表达式验证账号、手机号、电话和邮箱是否合法
2017/03/08 Javascript
Vue数据双向绑定原理及简单实现方法
2018/05/18 Javascript
详解关于element级联选择器数据回显问题
2019/02/20 Javascript
详解用场景去理解函数柯里化(入门篇)
2019/04/11 Javascript
JavaScript实现字符串与HTML格式相互转换
2020/03/17 Javascript
微信小程序实现弹幕墙(祝福墙)
2020/11/18 Javascript
将字典转换为DataFrame并进行频次统计的方法
2018/04/08 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
2019/06/28 Python
Python3使用PySynth制作音乐的方法
2019/09/09 Python
如何使用python3获取当前路径及os.path.dirname的使用
2019/12/13 Python
Python基础之字典常见操作经典实例详解
2020/02/26 Python
Python基于time模块表示时间常用方法
2020/06/18 Python
解决tensorflow/keras时出现数组维度不匹配问题
2020/06/29 Python
css3 background属性调整增强介绍
2010/12/18 HTML / CSS
全球酒店预订网站:Hotels.com
2016/08/10 全球购物
请解释接口的显式实现有什么意义
2012/05/26 面试题
党校自我鉴定范文
2013/10/02 职场文书
《落花生》教学反思
2014/02/25 职场文书
综合内勤岗位职责
2014/04/14 职场文书
公司承诺书怎么写
2014/05/24 职场文书
食品安全宣传标语
2014/06/07 职场文书
多媒体编辑专业毕业生求职信
2014/06/13 职场文书
写给医生的感谢信
2015/01/22 职场文书
承诺书范本大全
2015/05/04 职场文书
基层医务人员三严三实心得体会
2016/01/05 职场文书
《攀登者》:“海拔8000米以上,你不能指望任何人”
2019/11/25 职场文书
详解Vue slot插槽
2021/11/20 Vue.js
你真的会用Mysql的explain吗
2022/03/31 MySQL
Apache Hudi集成Spark SQL操作hide表
2022/03/31 Servers
python模拟浏览器 使用selenium进入好友QQ空间并留言
2022/04/12 Python
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
2022/07/07 Java/Android