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中各字符串出现次数的工具
May 03 Javascript
悬浮数字的实现案例
Feb 19 Javascript
jquery实现不包含当前项的选择器实例
Jun 25 Javascript
JQ技术实现注册页面带有校验密码强度
Jul 27 Javascript
jQuery网页右侧广告跟随滚动代码分享
Apr 20 Javascript
实例讲解jQuery中对事件的命名空间的运用
May 24 Javascript
Angular的事件和表单详解
Dec 26 Javascript
JavaScript实现打地鼠小游戏
Apr 23 Javascript
Vue.js 实现数据展示全部和收起功能
Sep 05 Javascript
React中使用UMEditor的方法示例
Dec 27 Javascript
jQuery 选择器用法实例分析【prev + next】
May 22 jQuery
vue实现Toast组件轻提示
Apr 10 Vue.js
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高自定义性安全验证码代码
2011/11/27 PHP
详解PHP编码转换函数应用技巧
2016/10/22 PHP
TP5框架请求响应参数实例分析
2019/10/17 PHP
js 操作css实现代码
2009/06/11 Javascript
jquery 简单图片导航插件jquery.imgNav.js
2010/03/17 Javascript
了解一点js的Eval函数
2012/07/26 Javascript
caller和callee的区别介绍及演示结果
2013/03/10 Javascript
Nodejs Post请求报socket hang up错误的解决办法
2014/09/25 NodeJs
javascript设计模式之中介者模式Mediator
2014/12/30 Javascript
表单元素值获取方式js及java方式的简单实例
2016/10/15 Javascript
JS自定义函数对web前端上传的文件进行类型大小判断
2016/10/19 Javascript
Bootstrap面板使用方法
2017/01/16 Javascript
js每隔两秒输出数组中的一项(实例)
2017/05/28 Javascript
jquery实现放大镜简洁代码(推荐)
2017/06/08 jQuery
Angular入口组件(entry component)与声明式组件的区别详解
2018/04/09 Javascript
Mint UI实现A-Z字母排序的城市选择列表
2018/12/28 Javascript
JS使用Prim算法和Kruskal算法实现最小生成树
2019/01/17 Javascript
JavaScript工具库之Lodash详解
2019/06/15 Javascript
javascript关于“时间”的一次探索
2019/07/24 Javascript
nodejs环境使用Typeorm连接查询Oracle数据
2019/12/05 NodeJs
解决vue-router 切换tab标签关闭时缓存问题
2020/07/22 Javascript
python操作摄像头截图实现远程监控的例子
2014/03/25 Python
python调用机器喇叭发出蜂鸣声(Beep)的方法
2015/03/23 Python
详解python uiautomator2 watcher的使用方法
2019/09/09 Python
numpy 声明空数组详解
2019/12/05 Python
PyTorch和Keras计算模型参数的例子
2020/01/02 Python
python统计文章中单词出现次数实例
2020/02/27 Python
HTML5 使用 sessionStorage 进行页面传值的方法
2018/07/02 HTML / CSS
业务员岗位职责范本
2013/12/15 职场文书
招商业务员岗位职责
2013/12/16 职场文书
楼面经理岗位职责范本
2014/02/18 职场文书
本科毕业自我鉴定
2014/03/20 职场文书
青年志愿者活动方案
2014/08/17 职场文书
七一慰问简报
2015/07/20 职场文书
Python办公自动化解决world文件批量转换
2021/09/15 Python
关于Oracle12C默认用户名system密码不正确的解决方案
2021/10/16 Oracle