迭代器模式
介绍
- 顺序访问一个集合;
- 使用者无需知道集合的内部结构(封装);
设计原则验证
- 迭代器对象和目标对象分离;
- 迭代器将使用者与目标对象隔离开;
- 符合开放封闭原则;
示例
class Iterator {
constructor() {
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 = list;
}
// 生成遍历器
getIterator(){
return new Iterator(this)
}
}
// 测试
let arr = [1,2,3,4,5,6];
let container = new Container(arr);
let iterator = container.getIterator()
while (iterator.hasNext()) {
console.log(iterator.next())
}
场景
- ES6 Iterator
- ES6 语法中,有序集合的数据类型已经有很多;
- Array、Map、Set、String、TypedArray、arguments、NodeList;
- 需要有一个统一的遍历接口来遍历所有数据类型;
- Object不是有序集合,可以用Map代替;