17. 迭代器模式(Iterator)
17. 迭代器模式(Iterator)
问题:想统一遍历不同数据结构,不暴露内部实现。
核心:提供 next() 方法,依次返回元素直到结束。
class NumberIterator {
#data;
#index = 0;
constructor(data) { this.#data = data; }
next() {
if (this.#index < this.#data.length) {
return { value: this.#data[this.#index++], done: false };
}
return { value: undefined, done: true };
}
}
const iter = new NumberIterator([10, 20, 30]);
let result;
while (!(result = iter.next()).done) {
console.log(result.value);
}
// 10 → 20 → 30package iterator
import "fmt"
type Iterator[T any] struct {
data []T
cursor int
}
func NewIterator[T any](data []T) *Iterator[T] {
return &Iterator[T]{data: data}
}
func (it *Iterator[T]) Next() (T, bool) {
var zero T
if it.cursor >= len(it.data) {
return zero, false
}
val := it.data[it.cursor]
it.cursor++
return val, true
}
// 使用
// iter := NewIterator([]int{10, 20, 30})
// for {
// val, ok := iter.Next()
// if !ok { break }
// fmt.Println(val)
// }JS 的
for...of、Array.prototype[Symbol.iterator]、生成器函数就是语言内置的迭代器模式。