迭代器模式 演示
迭代器模式 場景
迭代器模式 總結
這種模式用於順序訪問集合物件的元素,不需要知道集合物件的底層表示。
沒有找到合適的例子,就以乙個常用的 jquery 為示例吧。
>
jquery eachp
>
>
jquery eachp
>
>
jquery eachp
>
src=
"">
script
>
>
var arr =[1
,2,3
]var nodelist = document.
getelementsbytagname
('p'
)var $p =$(
'p')
// 要對這三個變數進行遍歷,需要寫三個遍歷方法
// 第一
arr.
foreach
(function
(item)
)// 第二
var i, length = nodelist.length
for(i =
0; i < length; i++
)// 第三
$p.each
(function
(key, p)
)script
>
如何能寫出乙個方法來遍歷這三種物件呢?
// 如何能寫出乙個方法來遍歷這三種物件呢?
function
each
(data))}
// 測試**
each
(arr)
each
(nodelist)
each
($p)
//順序遍歷有序集合
//使用者不必知道集合的內部結構
其中var $data = $(data)
就是乙個迭代器,它可以以統一的方式訪問內部結構,但是不需要知道內部結構是什麼。這就是迭代器模式的主要思想。
先看下傳統的 uml 類圖
簡化之後的 uml 類圖
class
iterator
next()
return
null
}hasnext()
return
true}}
class
container
getiterator()
}// 測試**
let container =
newcontainer([
1,2,
3,4,
5])let iterator = container.
getiterator()
while
(iterator.
hasnext()
)
// 如何能寫出乙個方法來遍歷這三種物件呢?
function
each
(data))}
// 測試**
each
(arr)
each
(nodelist)
each
($p)
//順序遍歷有序集合
//使用者不必知道集合的內部結構
function
each
(data)
// console.log(iterator.next())
// console.log(iterator.next())
// console.log(iterator.next())
// console.log(iterator.next()) // 沒有資料時返回
let item =
while
(!item.done)}}
// 測試**
let arr =[1
,2,3
,4]let nodelist = document.
getelementsbytagname
('p'
)let m =
newmap()
m.set
('a'
,100)m.
set(
'b',
200)
each
(arr)
each
(nodelist)
each
(m)
有乙個問題,symbol.iterator
並不是人人都知道,而且這麼讓大家用,每個人都需要封裝乙個each
函式,相當不人人性化 —— es6 當然知道這個問題,於是就有了for...of
語法。但是你要明白,這個語法最終依賴的還是 es6 iterator ,是基於迭代器模式的。
// `symbol.iterator` 並不是人人都知道
// 也不是每個人都需要封裝乙個 each 方法
// 因此有了 `for...of` 語法
function
each
(data)
}each
(arr)
each
(nodelist)
each
(m)
說明: object 不是有序即可,如果想要 object 的遍歷器功能,可以使用 mapiterator 的價值不限於上述幾個型別的遍歷
還有generator
的使用
即只要返回的資料符合 iterator 介面的要求
即可使用iterator 語法,這就是迭代器模式
function
*helloworldgenerator()
var hw =
helloworldgenerator()
;hw.
next()
hw.next()
hw.next()
hw.next
()
當然也可以用for...of
function
*foo()
// 當然也可以用`for...of`
for(
let v of
foo())
(以上**放在 nodejs 環境下執行) generator 的語法和應用是另外一部分知識,此處就不展開講解了,拿來只是為了理解迭代器模式的設計思想。
設計原則驗證:
python基礎(十一) 迭代器與生成器
python中的序列型別都是可迭代的物件,例如列表 元組和字串。可以通過for迴圈來遍歷。iter 函式可以手動的建立可迭代物件。迭代器一次只能取乙個值,迭代器取值不能回退,只能一直往前取。當迭代器的值取盡的時候會報stopiteration的錯誤。iter 和 next 構成了迭代協議,迭代器擁有...
迭代器模式
迭代器模式 iterator 提供一種方法順序訪問乙個聚合物件中各個元素,而不是暴露該物件的內部表示。乙個聚集物件,而且不管這些物件是什麼都需要遍歷的時候,你就應該考慮用迭代器模式。你需要對聚集有多種方式遍歷時,可以考慮用迭代器模式。為遍歷不同的聚集結構提供如開始,下乙個,是否結束,當前哪一項等統一...
迭代器模式
我最早接觸的設計模式就是迭代器模式了哈 為什麼要有迭代器模式呢?看下下面的 就知道了哈 對於乙個陣列物件sz 我們要怎麼遍歷呢?public void bianlisz class geweishu public myiterator getiterator private class geweis...