设计模式 九 迭代器模式

66 阅读1分钟

介绍

1.顺序访问一个集合

2.使用者无需知道内部的结构(封装)

image.png

image.png

image.png

 class Iterator{
    constructor(container){
        this.list = container.list;
        this.index = 0
    }
    next(){
        if(this.hasNext()){
            return this.list[this.index++]
        }
        return null
    }
    hasNext(){
        if(this.index >= this.list.length){
            return false
        }
        return true
    }
}
class Container{
  constructor(list){
      this.list
  }
  getIterator(){
      return new Iterator(this)
  }
}

场景

1.jQuery each

image.png

2.ES6 Iterator

有一个统一接口遍历所有数据类型

function each(){
  let iterator = data[Symbol.iterator]
  let item = {done:flase}
  while(!item.done){
      item = iterator.next()
      if(!item.done){
          console.log('done');
      }
  }
}

设计原则验证

迭代器对象和目标对象分分离

迭代器将使用者和目标对象隔离开