JavaScript設(shè)計模型Iterator實例解析
這篇文章主要介紹了JavaScript設(shè)計模型Iterator實例解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
Iterator Pattern是一個很重要也很簡單的Pattern:迭代器!
我們可以提供一個統(tǒng)一入口的迭代器,Client只需要知道有哪些方法,或是有哪些Concrete Iterator,并不需要知道他們底層如何實作!現(xiàn)在就讓我們來開始吧!
起手式
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()) }
結(jié)論
會發(fā)現(xiàn)Iterator 1號 2號的結(jié)果都是一樣的!他們都只需要讓Client知道有hasNext、next就好,底層的實作不需要讓他們知道!
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
bootstrap中selectpicker下拉框使用方法實例
這篇文章主要給大家介紹了關(guān)于bootstrap中selectpicker下拉框使用的相關(guān)資料,文中通過示例介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03微信小程序從服務(wù)器中獲取數(shù)據(jù)的示例代碼
要從服務(wù)器中獲取數(shù)據(jù),可以使用微信小程序提供的wx.request()方法,下面通過示例代碼介紹微信小程序怎么從服務(wù)器中獲取數(shù)據(jù),感興趣的朋友一起看看吧2024-03-03BootStrap的select2既可以查詢又可以輸入的實現(xiàn)代碼
這篇文章主要介紹了bootstrap的select2既可以查詢又可以輸入的實現(xiàn)代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-02-02JavaScript動態(tài)插入script的基本思路及實現(xiàn)函數(shù)
偶爾需要動態(tài)插入javascript代碼的需求,基本思路是動態(tài)創(chuàng)建一個script標簽,設(shè)置其src屬性,type屬性等,需要的朋友可以參考下2013-11-11ie中js創(chuàng)建checkbox默認選中問題探討
js創(chuàng)建checkbox默認選中在某些特殊情況下還是比較實用的,下面有個不錯的示例,大家可以參考下2013-10-10通過設(shè)置CSS中的position屬性來固定層的位置
position 屬性規(guī)定元素的定位類型,這個屬性定義建立元素布局所用的定位機制,本文給大家介紹通過設(shè)置CSS中的position屬性來固定層的位置,感興趣的朋友一起學(xué)習(xí)吧2015-12-12JSON傳遞bool類型數(shù)據(jù)的處理方式介紹
如果服務(wù)器端生成的JSON中有bool類型的數(shù)據(jù)時,到客戶端解析時出現(xiàn)了小小的問題,下面簡單為大家介紹下正確的處理方式2013-09-09