zoukankan      html  css  js  c++  java
  • 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]));
    /**
     * 内部迭代器和外部迭代器各有优缺点,使用时还需要根据具体场景,灵活应用。
     */
  • 相关阅读:
    Nginx--sub_filter模块
    Scala学习5 objext
    Scala学习4 Class
    Scala学习3 Map
    Scala学习2 Array、ArrayBuffer
    Scala学习1 基本数据类型,条件,循环
    flink1.9新特性:维表Join解读
    Blink源码编译
    Flink Maven项目兼容多版本Kafka
    Ant build.xml程序简单说明
  • 原文地址:https://www.cnblogs.com/stinchan/p/6994125.html
Copyright © 2011-2022 走看看