您好,登录后才能下订单哦!
今天就跟大家聊聊有关如何进行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: Mapconstructor() { this.index = 0 this.dataStorage = new Map() } 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设计模型Iterator的实践有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。