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 实现父窗口引用弹出窗口的值的脚本
Aug 07 Javascript
JQuery,Extjs,YUI,Prototype,Dojo 等JS框架的区别和应用场景简述
Apr 15 Javascript
javascript是怎么继承的介绍
Jan 05 Javascript
JS声明变量背后的编译原理剖析
Dec 28 Javascript
js禁止页面刷新禁止用F5键刷新禁止右键的示例代码
Sep 23 Javascript
js格式化时间和js格式化时间戳示例
Feb 10 Javascript
jquery获得当前html页面源码的方法
Jul 14 Javascript
js实现页面a向页面b传参的方法
May 29 Javascript
Vue.js学习示例分享
Feb 05 Javascript
Javascript面试经典套路reduce函数查重
Mar 23 Javascript
vue项目中将element-ui table表格写成组件的实现代码
Jun 12 Javascript
原生js实现自定义难度的扫雷游戏
Jan 22 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实现首页链接查询 友情链接检查的代码
2010/01/05 PHP
php url地址栏传中文乱码解决方法集合
2010/06/25 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
2013/09/28 PHP
PHP获取一个字符串中间一部分字符的方法
2014/08/19 PHP
php微信高级接口群发 多客服
2016/06/23 PHP
微信支付PHP SDK ―― 公众号支付代码详解
2016/09/13 PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
2016/10/28 PHP
php实现数组重复数字统计实例
2018/09/30 PHP
php array_map()函数实例用法
2021/03/03 PHP
[原创]提供复制本站内容时出现,该文章转自脚本之家等字样的js代码
2007/03/27 Javascript
ie和firefox不兼容的解决方法集合
2009/04/28 Javascript
javascript时间自动刷新实现原理与步骤
2013/01/06 Javascript
JavaScript前端图片加载管理器imagepool使用详解
2014/12/29 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
2016/08/27 Javascript
BootStrap Validator使用注意事项(必看篇)
2016/09/28 Javascript
JavaScript实现经典排序算法之冒泡排序
2016/12/28 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
2017/03/03 Javascript
Vue上传组件vue Simple Uploader的用法示例
2017/08/25 Javascript
React注册倒计时功能的实现
2018/09/06 Javascript
微信小程序地图(map)组件点击(tap)获取经纬度的方法
2019/01/10 Javascript
使用Node.js在深度学习中做图片预处理的方法
2019/09/18 Javascript
详解javascript void(0)
2020/07/13 Javascript
vue中用 async/await 来处理异步操作
2020/07/18 Javascript
Postman环境变量全局变量使用方法详解
2020/08/13 Javascript
基于Python3 逗号代码 和 字符图网格(详谈)
2017/06/22 Python
Python使用MD5加密算法对字符串进行加密操作示例
2018/03/30 Python
python实时监控cpu小工具
2018/06/21 Python
python3实现二叉树的遍历与递归算法解析(小结)
2019/07/03 Python
Django框架ORM数据库操作实例详解
2019/11/07 Python
Python Numpy 自然数填充数组的实现
2019/11/28 Python
python画图常规设置方式
2020/03/05 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
2020/07/03 Python
Pycharm添加虚拟解释器报错问题解决方案
2020/10/13 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
2020/10/15 Python
印度最大的酒店品牌网络:OYO Rooms
2016/07/24 全球购物
员工生日会策划方案
2014/06/14 职场文书