JS設計模式初識(四)-迭代器模式

定義

迭代器模式是指提供一種方法順序訪問一個聚合對象中的各個元素,而又不須要暴露該對象的內部表示。迭代器模式能夠把迭代的過程從業務邏輯中分離出來,在使用迭代器模式以後,即迭代器模式使不關心對象的內部構造,也能夠按順序訪問其中的每一個元素。設計模式

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 迭代器

待完成數組

總結

迭代器模式是一種相對簡單的模式,簡單到不少時候咱們都不認爲它是一種設計模式。目前的絕大部分語言都內置了迭代器。bash

相關文章
相關標籤/搜索