JS設計模式(迭代器模式)
JS設計模式(迭代器模式)
介紹
- 順序訪問一個集合
- 使用者無需知道集合的內部結構(封裝)
演示
- jQuery的多種遍歷方式
修改後
UML類圖
程式碼
class Iterator {
constructor(container) {
this.list = container.list
this.index = 0
}
next() {
if(this.hasNext()) {
return this.list[this.index++]
}
return null
}
hasNext() {
if(this.index >= this.list.length) {
return false
}
return true
}
}
class Container {
constructor(list) {
this.list = list
}
// 生成遍歷器
getIterator() {
return new Iterator(this)
}
}
// 測試
var arr = [1,2,3,4,5]
let container = new Container(arr)
let iterator = container.getIterator()
while(iterator.hasNext()) {
console.log(iterator.next())
}
場景
ES6的Iterator
ES6 Iterator為何存在
- ES6語法中,有序集合的資料型別已經有很多
- Array、Map(有序的object)、Set、String、TypedArray、arguments、NodeList
- 需要有一個統一的遍歷介面來遍歷所有的資料型別
- 注意: (object 不是有序集合,可以用Map代替)
ES Iterator是什麼
- 以上資料型別,都有 [symbol.iterator] 屬性
- 屬性值是函式,執行函式返回一個迭代器
- 這個迭代器就有next方法可順序迭代子元素
- 可執行Array.prototype[Symbol.iterator]來測試
示例
例1:
其中,data是帶有遍歷器特性的物件: data[Symbol.iterator] 有值
例2:
優化:將一堆的console.log 修改成 有值的時候輸出
ES6 Iterator 與Generator
- Iterator 的價值不限於上述幾個型別的遍歷
- 還有Generator 函式的使用
- 即只要返回的資料符合Iterator介面的要求
- 即可使用Iterator 語法,這就是迭代器模式
使用:
總結
- 迭代器物件和目標物件分離
- 迭代器將使用者與目標物件隔離開
- 符合開放封閉原則
相關文章
- js設計模式--迭代器模式JS設計模式
- 設計模式(十七)迭代器模式設計模式
- 設計模式之迭代器模式設計模式
- JavaScript 設計模式(六) 迭代器模式JavaScript設計模式
- golang設計模式之迭代器模式Golang設計模式
- Javascript設計模式之迭代器模式JavaScript設計模式
- 簡說設計模式——迭代器模式設計模式
- 極簡設計模式-迭代器模式設計模式
- 設計模式(十六)迭代器設計模式
- C#設計模式之迭代器模式C#設計模式
- javascript設計模式 之 4 迭代器模式JavaScript設計模式
- 23天設計模式之迭代器模式設計模式
- Rust語言之GoF設計模式:迭代器模式RustGo設計模式
- 16.java設計模式之迭代器模式Java設計模式
- 軟體設計模式系列之十八——迭代器模式設計模式
- 軟體設計模式學習(二十)迭代器模式設計模式
- 迭代器設計模式知識概括設計模式
- 設計模式(二十四)----行為型模式之迭代器模式設計模式
- Android理解設計模式之組合模式、迭代器模式、訪問者模式Android設計模式
- 「補課」進行時:設計模式(13)——迭代器模式設計模式
- 《JavaScript設計模式與開發實踐》模式篇(4)—— 迭代器模式JavaScript設計模式
- 初學設計模式(java版)一:行為型模式之--Iterator模式(迭代器模式)設計模式Java
- 設計模式(十七)——迭代器模式(ArrayList 集合應用原始碼分析)設計模式原始碼
- js設計模式–命令模式JS設計模式
- js設計模式--命令模式JS設計模式
- js設計模式--代理模式JS設計模式
- js設計模式--策略模式JS設計模式
- 迭代器模式模式
- 設計模式 - 迭代器模式詳解及其在ArrayList中的應用設計模式
- js設計模式JS設計模式
- js設計模式–組合模式JS設計模式
- js設計模式--模板方法模式JS設計模式
- js設計模式--組合模式JS設計模式
- JS設計模式六:策略模式JS設計模式
- JS設計模式四:代理模式JS設計模式
- js設計模式--單例模式JS設計模式單例
- 迭代器設計模式,幫你大幅提升Python效能設計模式Python
- 行為型模式:迭代器模式模式