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 相关文章推荐
用showModalDialog弹出页面后,提交表单总是弹出一个新窗口
Jul 18 Javascript
JS 用6N±1法求素数 实例教程
Oct 20 Javascript
jquery插件之easing使用
Aug 19 Javascript
javascript SpiderMonkey中的函数序列化如何进行
Dec 05 Javascript
javascript实现页面刷新时自动清空表单并选中的方法
Jul 18 Javascript
JavaScript实现带播放列表的音乐播放器实例分享
Mar 07 Javascript
JavaScript中双向数据绑定详解
May 03 Javascript
javascript按钮禁用和启用的效果实例代码
Oct 29 Javascript
JS字典Dictionary类定义与用法示例
Feb 01 Javascript
layui table 表格上添加日期控件的两种方法
Sep 28 Javascript
js canvas实现俄罗斯方块
Oct 11 Javascript
vue表单验证之禁止input输入框输入空格
Dec 03 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
用C/C++扩展你的PHP 为你的php增加功能
2012/09/06 PHP
php实现的CSS更新类实例
2014/09/22 PHP
PHP实现仿Google分页效果的分页函数
2015/07/29 PHP
PHP 搜索查询功能实现
2016/11/29 PHP
YII2 实现多语言配置的方法分享
2017/01/11 PHP
PHP编程计算日期间隔天数的方法
2017/04/26 PHP
PHP7导出Excel报ERR_EMPTY_RESPONSE解决方法
2019/04/16 PHP
用YUI做了个标签浏览效果
2007/02/20 Javascript
为JavaScript提供睡眠功能(sleep) 自编译JS引擎
2010/08/16 Javascript
jQuery学习笔记之DOM对象和jQuery对象
2010/12/22 Javascript
jquery设置元素的readonly和disabled的写法
2013/09/22 Javascript
jQuery实现html表格动态添加新行的方法
2015/05/28 Javascript
你所未知的3种Node.js代码优化方式
2016/02/25 Javascript
jQuery实现鼠标跟随提示层效果代码(可显示文本,Div,Table,Html等)
2016/04/18 Javascript
详解JavaScript中的事件流和事件处理程序
2016/05/20 Javascript
JavaScript数组去重的6个方法
2017/01/21 Javascript
JS完成画圆圈的小球
2017/03/07 Javascript
jquery中关于bind()方法的使用技巧分享
2017/03/30 jQuery
JavaScript之Canvas_动力节点Java学院整理
2017/07/04 Javascript
Vue三层嵌套路由的示例代码
2018/05/05 Javascript
js实现一款简单踩白块小游戏(曾经很火)
2019/12/02 Javascript
JavaScript实时更新当前的时间的示例代码
2020/07/15 Javascript
nuxt 每个页面head标签内容设置方式
2020/11/05 Javascript
python随机生成指定长度密码的方法
2015/04/04 Python
python中单下划线_的常见用法总结
2018/07/10 Python
初探利用Python进行图文识别(OCR)
2019/02/26 Python
pyecharts调整图例与各板块的位置间距实例
2020/05/16 Python
英国折扣零售连锁店:QD Stores
2018/12/08 全球购物
超级搞笑检讨书
2014/01/15 职场文书
《毛主席在花山》教学反思
2014/04/20 职场文书
法律顾问服务方案
2014/05/15 职场文书
2014年大学宣传部工作总结
2014/12/19 职场文书
机关工会工作总结2015
2015/05/26 职场文书
MySQL 8.0 Online DDL快速加列的相关总结
2021/06/02 MySQL
如何更改Win11声音输出设备?Win11声音输出设备四种更改方法
2022/04/08 数码科技
CSS子盒子水平和垂直居中的五种方法
2022/07/23 HTML / CSS