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  Error 对象 错误处理
May 18 Javascript
一个简单的Ext.XTemplate的实例代码
Mar 18 Javascript
js的onload事件及初始化按钮事件示例代码
Sep 25 Javascript
SinaEditor使用方法详解
Dec 28 Javascript
javascript事件冒泡详解和捕获、阻止方法
Apr 12 Javascript
js怎么判断flash swf文件是否加载完毕
Aug 14 Javascript
原生js实现鼠标跟随效果
Feb 28 Javascript
ligerUI---ListBox(列表框可移动的实例)
Nov 28 Javascript
Vue中自定义全局组件的实现方法
Dec 08 Javascript
浅谈AngularJS中$http服务的简单用法
May 15 Javascript
JavaScript中 ES6变量的结构赋值
Jul 10 Javascript
Vue中keep-alive组件的深入理解
Aug 23 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
安装APACHE
2007/01/15 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
2014/06/17 PHP
ThinkPHP中自定义错误页面和提示页面实例
2014/11/22 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
2015/07/01 PHP
php实现博客,论坛图片防盗链的方法
2016/10/15 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
2019/05/23 PHP
CL vs ForZe BO5 第三场 2.13
2021/03/10 DOTA
javascript 极速 隐藏/显示万行表格列只需 60毫秒
2009/03/28 Javascript
jQuery入门问答 整理的几个常见的初学者问题
2010/02/22 Javascript
JavaScript中Date.toSource()方法的使用教程
2015/06/12 Javascript
JavaScript模块化开发之SeaJS
2015/12/13 Javascript
js格式化输入框内金额、银行卡号
2016/02/01 Javascript
详解原生JavaScript实现jQuery中AJAX处理的方法
2016/05/10 Javascript
微信小程序开发之实现选项卡(窗口顶部TabBar)页面切换
2016/11/25 Javascript
jquery处理checkbox(复选框)是否被选中实例代码
2017/06/12 jQuery
react开发教程之React 组件之间的通信方式
2017/08/12 Javascript
Vue.js在数组中插入重复数据的实现代码
2017/11/17 Javascript
npm 下载指定版本的组件方法
2018/05/17 Javascript
小程序实现搜索框功能
2020/03/26 Javascript
VsCode与Node.js知识点详解
2019/09/05 Javascript
js操作两个json数组合并、去重,以及删除某一项元素
2020/09/22 Javascript
[07:08]2014DOTA2西雅图国际邀请赛 小组赛7月11日TOPPLAY
2014/07/11 DOTA
python简单实现基数排序算法
2015/05/16 Python
Python使用Scrapy保存控制台信息到文本解析
2017/12/27 Python
Python爬虫小技巧之伪造随机的User-Agent
2018/09/13 Python
搞定这套Python爬虫面试题(面试会so easy)
2019/04/03 Python
基于Python计算圆周率pi代码实例
2020/03/25 Python
Python日志处理模块logging用法解析
2020/05/19 Python
思想品德自我鉴定
2013/10/12 职场文书
基层工作经历证明
2014/01/13 职场文书
贯彻学习两会心得体会范文
2014/03/17 职场文书
乡镇消防工作实施方案
2014/03/27 职场文书
教师拔河比赛广播稿
2014/10/14 职场文书
幼儿园圣诞节活动总结
2015/05/06 职场文书
2015年学校图书室工作总结
2015/05/19 职场文书
MySQL 自定义变量的概念及特点
2021/05/13 MySQL