# 设计模式:迭代器模式
# 什么是迭代器模式
迭代器模式是提供一种方法顺序访问一个聚合对象中的每个元素,同时还不暴露对象内部结构(单一职责原则)。
比如数组的 Array.prototype.forEach() 就是数组对象的迭代器。
# Coding
内部迭代器
为对象增加迭代的方法,外部只用调用一次
Array.prototype.forEach 函数就典型的内部迭代器,咱们也可以实现一个类似这样的。
// 定义数组
var a = [11,22,3]
// 实现内部迭代器
a.each = function(fn) {
for (let i = 0; i < this.length; i++) {
fn(a[i], this)
}
}
// 调用内部迭代器
a.each(function(i, list) {
console.log(i, list);
});
外部迭代器
用户必须手动的请求迭代下一个元素,比如 xx.next()
。
var Iterator = function(obj) {
var current = 0;
var next = function() {
current += 1;
}
var isDone = function() {
return current >= obj.length;
}
var getCurrentItem = function() {
return obj[current];
}
return {
next,
isDone,
getCurrentItem
}
}
let iterator_1 = Iterator([11,22,33]);
while(!iterator_1.isDone()){
console.log(
iterator_1.getCurrentItem()
)
// 必须手动调用 next 函数,让指针指向下一个元素。
iterator_1.next();
}
# 总结
迭代器模式是一种相对简单的模式,简单到很多时候我们都不认为它是一种设计模式。目前 的绝大部分语言都内置了迭代器。
← 设计模式:代理模式 设计模式:发布订阅模式 →