JavaScript设计模型Iterator实例解析
这篇文章主要介绍了JavaScript设计模型Iterator实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
IteratorPattern是一个很重要也很简单的Pattern:迭代器!
我们可以提供一个统一入口的迭代器,Client只需要知道有哪些方法,或是有哪些ConcreteIterator,并不需要知道他们底层如何实作!现在就让我们来开始吧!
起手式
Iterator最主要的东西就是两个:hasNext、next。要让Client知道是否还有下一个,和切换到下一个!
定义Interface
interfaceIteratorInterface{ index:number dataStorage:any hasNext():boolean next():any addItem(item:any):void }
实作介面
下面的范例我将会使用Map、Array这两个常见的介面实作。
classiterator1implementsIteratorInterface{ index:number dataStorage:any[] constructor(){ this.index=0 this.dataStorage=[] } hasNext():boolean{ returnthis.dataStorage.length>this.index } next():any{ returnthis.dataStorage[this.index++] } addItem(item:any):void{ this.dataStorage.push(item) } }
//map classiterator2implementsIteratorInterface{ index:number dataStorage:Mapconstructor(){ this.index=0 this.dataStorage=newMap () } hasNext():boolean{ returnthis.dataStorage.get(this.index)!=undefined } next():any{ returnthis.dataStorage.get(this.index++) } addItem(item:any):void{ this.dataStorage.set(this.dataStorage.size,item) } }
Client
我没有实作一个Client,所以我是直接new一个类别出来直接使用!
consti=newiterator1() i.addItem(123) i.addItem(456) i.addItem('dolphin') while(i.hasNext()){ console.log(i.next()) } console.log(`====================`) consti2=newiterator2() i2.addItem(123) i2.addItem(456) i2.addItem('dolphin') while(i2.hasNext()){ console.log(i2.next()) }
结论
会发现Iterator1号2号的结果都是一样的!他们都只需要让Client知道有hasNext、next就好,底层的实作不需要让他们知道!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。