迭代器模式属于一种比较简单的设计模式,许多开发语言都内置了迭代器。这里要说的是迭代器分为内部迭代器和外部迭代器,它们都有各自的适用场景。
/* pre:迭代器模式 * 迭代器模式提供了一种顺序访问聚合元素内部对象的方法,而又不需要暴露对象内部的表示。 */ //-------- 示例1 -------- /** * 内部迭代器:内部函数已经定义好迭代的规则,外部只需一次初始化调用。 * 这里手动实现each遍历函数。 */ var each = function(arr, callback) { for(var i = arr.length - 1; i >= 0; i--) { callback.call(arr[i], i, arr[i]); } }; each([1, 2, 3], function() { console.log("参数结果:" + Array.prototype.join.call(arguments, ",")); }); //------------ 示例2 ------------ /** * 外部迭代器:必须显示地迭代下一个元素。外部迭代器增加了调用的复杂度,但相对地增强了迭代器的灵活性。 */ 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: next, isDone: isDone, getCurrentItem: getCurrentItem } }; var compare = function(iter1, iter2) { while(!iter1.isDone() && !iter2.isDone()) { if(iter1.getCurrentItem() != iter2.getCurrentItem()) { throw new Error("两个数组不相同;"); } iter1.next(); iter2.next(); } console.log("两个数组相同。"); }; compare(iterator([1, 2, 3]), iterator([1, 2, 3])); /** * 内部迭代器和外部迭代器各有优缺点,使用时还需要根据具体场景,灵活应用。 */
作者:『Stinchan』
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。