• JavaScript设计模式_04_迭代器模式


    迭代器模式属于一种比较简单的设计模式,许多开发语言都内置了迭代器。这里要说的是迭代器分为内部迭代器和外部迭代器,它们都有各自的适用场景。

    /* 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]));
    /**
     * 内部迭代器和外部迭代器各有优缺点,使用时还需要根据具体场景,灵活应用。
     */
  • 相关阅读:
    C#学习笔记一类型转换、枚举、foreach
    C#学习笔记四ref out参数
    SQL学习笔记一SQL基础
    C#学习笔记七索引器
    QUIC和TCP
    接口测试——测试点
    linux下 服务器资源监控工具nmon安装与使用
    Python执行.sh脚本cataline环境变量配置
    linux 常用命令之运行.sh文件
    jacoco+ant安装部署篇
  • 原文地址:https://www.cnblogs.com/stinchan/p/6994125.html
Copyright © 2020-2023  润新知