JS设计模式初识(四)-迭代器模式

本文深入解析迭代器模式,介绍其定义、作用及实现方式。通过自制迭代器和ES6 Iterator的示例,展示如何顺序访问聚合对象的元素,同时保持业务逻辑清晰。适合对设计模式感兴趣的开发者阅读。

定义

迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即迭代器模式使不关心对象的内部构造,也可以按顺序访问其中的每个元素。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值