迭代器模式
迭代器模式(Iterator Pattern)是一种行为设计模式,它提供了一种方法来顺序访问一个集合对象中的元素,而不暴露该对象的内部表示。
迭代器模式包含以下几个主要部分:
1、 迭代器(Iterator):提供访问和遍历集合成员的接口,一般包括next()、hasNext()等方法。
2、 具体迭代器(Concrete Iterator):实现迭代器接口,维护对集合的引用,并实现具体的遍历逻辑。
3、 聚合容器(Aggregate):定义创建迭代器的接口,通常包括一个makeIterator()方法,用于返回一个迭代器对象。
4、 具体聚合类(Concrete Aggregate):实现聚合接口,维护集合的内部数据结构,并返回具体的迭代器实例。
代码实现:
typescript
abstract class ITerator<T> {
abstract next: () => { value: T; done: boolean }
}
abstract class IAggregator {
public container: any[]
abstract push: (member: string) => void
abstract make: () => ITerator<string>
}
//实现对聚合类的内部的数据集合进行迭代
class ConcreteITerator implements ITerator<string> {
private i = -1
private aggregator: IAggregator
constructor(aggregator: IAggregator) {
this.aggregator = aggregator
}
/**
* 迭代聚合类的成员
* @returns
*/
next() {
const lastIndex = this.aggregator.container.length - 1
//边界限定
if (this.i >= lastIndex) this.i = lastIndex
//取值
const value = this.aggregator.container[++this.i]
return {
value,
done: this.i >= lastIndex,
}
}
}
//具体的聚合类
class ConcreteIaggregator implements IAggregator {
//存储元素的容器
public container: string[] = []
/**
* 向容器中存放元素
* @param member
*/
public push(member: string) {
this.container.push(member)
}
/**
* 创建迭代器,对内部的容器的遍历由迭代器完成
* @returns
*/
public make() {
return new ConcreteITerator(this)
}
}
const $aggregator = new ConcreteIaggregator()
$aggregator.push('eddie')
$aggregator.push('hubsky')
const $iterator = $aggregator.make()
console.log($iterator.next())
console.log($iterator.next())