博主按:《天天一个设想形式》旨在开端体会设想形式的精华,现在采纳
javascript
(
靠这用饭)和
python
(
地道喜好)两种言语完成。固然,每种设想形式都有多种完成体式格局,但此小册只纪录最直接了当的完成体式格局 :)
0. 项目地点
- 迭代器形式源码:https://github.com/dongyuanxin/design-pattern-demos/tree/master/iterator_pattern
- 《天天一个设想形式》系列:择要地点
1. 什么是迭代器形式?
迭代器形式是指供应一种要领递次接见一个鸠合对象的各个元素,使用者不须要相识鸠合对象的底层完成。
迭代器形式罕见和经常使用的有:内部迭代器、外部迭代器、倒序迭代器等等。
2. 内部迭代器和外部迭代器
内部迭代器:封装的要领完整接办迭代历程,外部只须要一次挪用。
外部迭代器:用户必需显式地要求迭代下一元素。熟习C++的朋侪,能够类比C++内置对象的迭代器的 end()
、next()
等要领。
3. 代码完成
3.1 python3 完成
python3的迭代器能够用作for()
轮回和next()
要领的对象。同时,在完成迭代器的时刻,能够在借助天生器yield
。python会天生传给yeild
的值。
def my_iter():
yield 0, "first"
yield 1, "second"
yield 2, "third"
if __name__ == "__main__":
# 要领1: Iterator能够用for轮回
for (index, item) in my_iter():
print("At", index , "is", item)
# 要领2: Iterator能够用next()来盘算
# 须要借助 StopIteration 来停止轮回
_iter = iter(my_iter())
while True:
try:
index,item = next(_iter)
print("At", index , "is", item)
except StopIteration:
break
3.2 ES6 完成
这里完成的是一个外部迭代器。须要完成边境推断函数、元素猎取函数和更新索引函数。
const Iterator = obj => {
let current = 0;
let next = () => current += 1;
let end = () => current >= obj.length;
let get = () => obj[current];
return {
next,
end,
get
}
}
let myIter = Iterator([1, 2, 3]);
while(!myIter.end()) {
console.log(myIter.get())
myIter.next();
}
4. 参考资料
- python迭代器
- 《JavaScript 设想形式和开辟实践》