迭代器模式 实践
class DataIterator<T> {
private data: T[];
private index = 0;
constructor(container: DataContainer<T>) {
this.data = container.data;
}
next(): T | null {
if (this.hasNext()) return this.data[this.index++];
return null;
}
hasNext(): boolean {
return this.index < this.data.length;
}
}
class DataContainer<T> {
data: T[];
constructor(data: T[]) {
this.data = data;
}
getIterator() {
return new DataIterator<T>(this);
}
}
const dataContainer = new DataContainer<number>([1, 2, 3]);
const iterator = dataContainer.getIterator();
while (iterator.hasNext()) {
console.log(iterator.next());
}
const dataContainer2 = new DataContainer<string>(["a", "b", "c"]);
const iterator2 = dataContainer2.getIterator();
while (iterator2.hasNext()) {
console.log(iterator2.next());
}
interface IPerson {
name: string;
age: number;
}
const p1: IPerson = {
name: "张三",
age: 22,
};
const p2: IPerson = {
name: "李四",
age: 44,
};
const dataContainer3 = new DataContainer<IPerson>([p1, p2]);
const iterator3 = dataContainer3.getIterator();
while (iterator3.hasNext()) {
console.log(iterator3.next());
}