概述
- 意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。
- 主要解决:不同的方式来遍历整个整合对象。
- 何时使用:遍历一个聚合对象。
-
如何解决:把在元素之间游走的责任交给迭代器,而不是聚合对象。
- 注意:由于golang没有内部类的概念,经典的迭代器模式用golang实现代码稍显丑陋,这里展示的是利用闭包的实现。
实现
package main
import (
"fmt"
)
type Info struct {
data string
}
type Set []Info
func (s Set) Iterator() func() (Info, bool) {
i := 0
return func() (info Info, ok bool) {
if i >= len(s) {
return info, false
}
info = s[i]
i++
return info, true
}
}
func main() {
s := Set{
Info{data: "a"},
Info{data: "b"},
}
it := s.Iterator() //获取迭代器
for {
info, ok := it()
if !ok {
break
}
fmt.Println(info)
}
}