定义
迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即迭代器模式使不关心对象的内部构造,也可以按顺序访问其中的每个元素。
4.1 自制迭代器each
function each(arr, callback=()=>{}) {
if (!Array.isArray(arr)) {
return throw new Error('传入的第一个参数不是数组');
}
for (let i=0;i<arr.length;i++) {
callback(arr[i], i, arr);
}
}
each([1,2,3], function(item, index, array) {
// console.log('item, index => ',item, index, array);
});
复制代码
4.2 外部迭代器 iterator
function Iterator(obj) {
const current = 0;
const next = () => {
current++;
}
const isDone = () => {
return current >= obj.length;
}
const getItem = () => {
return obj[current];
}
return {
next: next,
isDone: isDone,
getItem: getItem,
}
}
function compare(a, b) {
while(!a.isDone() && !b.isDone()) {
if (a.getItem() !== b.getItem()) {
throw new Error('iterator1 和 iterator2 不相等');
}
a.next();
b.next();
}
console.log('iterator1 和 iterator2 相等')
}
const iterator1 = Iterator([1,2,3]);
const iterator2 = Iterator([1,2,3]);
compare(iterator1, iterator2);
复制代码
4.3 ES6 Iterator 迭代器
待完成
总结
迭代器模式是一种相对简单的模式,简单到很多时候我们都不认为它是一种设计模式。目前的绝大部分语言都内置了迭代器。
转载于:https://juejin.im/post/5cfd31fd518825728262a4f0