《设计模式》之迭代器模式

意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。

迭代器模式是一种非常常见的设计模式,在我们的编程中,想要遍历一个非常大的容器对象,往往要先把数据都装进容器,再使用for循环等等的方式;

但是很多情况下,这个容器大到普通的内存都装不下的时候,暴力的遍历就行不通了;

而且,很多时候,这个容器里面的元素并不是直接能读取的,有可能是从网络读取,有可能是读文件,有可能是随机生成,所以不能简单暴力的for循环;

另外,如果这个容器到底有多少个元素也不清楚呢?也无法使用for循环这种方式;

这时候,迭代器模式就很有用,你不需要知道容器对象里有多少个元素,我只要告诉你,“还有没有元素”就行了,一直到取完了,也就迭代完了。

代码:

// 通用的迭代器接口
interface IIterator<T> {
    hasNext: () => boolean
    next: () => T
}

class ArrayContainer implements IIterator<any> {
    private arr = [1, 2, 3, 4, 5]
    private index = 0

    public hasNext = () => {
        return this.index <= this.arr.length - 1
    }

    public next = () => {
        const e = this.arr[this.index]
        this.index++
        return e
    }
}

// Test
const c = new ArrayContainer()
while(c.hasNext()) {
    console.log(c.next())
}

输出结果:

[LOG]: 1 
[LOG]: 2 
[LOG]: 3 
[LOG]: 4 
[LOG]: 5 
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。