迭代器模式通过接口封装遍历逻辑,Go中可用接口与结构体实现;定义HasNext、Next、Value方法,结合StringSlice及其迭代器示例实现集合遍历。

在Go语言中实现迭代器模式,可以让我们以统一的方式遍历不同类型的集合,而无需暴露其内部结构。虽然Go没有像Java或C++那样的接口继承体系,但通过接口和结构体的组合,依然能简洁地实现迭代器模式。
什么是迭代器模式
迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。这种设计模式属于行为型模式,常用于封装遍历逻辑。
定义迭代器接口
我们先定义一个通用的迭代器接口,包含基本的 Next() 和 Value() 方法:
type Iterator interface { HasNext() bool Next() interface{} Value() interface{}}
HasNext 判断是否还有下一个元素,Next 移动到下一个元素并返回当前值,Value 获取当前元素的值。
立即学习“go语言免费学习笔记(深入)”;
实现一个切片迭代器
以字符串切片为例,创建一个具体的集合和对应的迭代器:
type StringSlice struct { items []string}type StringSliceIterator struct { slice *StringSlice index int}func (s *StringSlice) CreateIterator() Iterator { return &StringSliceIterator{ slice: s, index: 0, }}func (it *StringSliceIterator) HasNext() bool { return it.index < len(it.slice.items)}func (it *StringSliceIterator) Next() interface{} { if it.HasNext() { value := it.Value() it.index++ return value } return nil}func (it *StringSliceIterator) Value() interface{} { if it.index < len(it.slice.items) { return it.slice.items[it.index] } return nil}
这里将集合(StringSlice)与迭代器分离,符合单一职责原则。调用 CreateIterator 返回一个可复用的迭代器实例。
使用示例
下面是如何使用这个迭代器遍历集合:
func main() { collection := &StringSlice{ items: []string{"apple", "banana", "cherry"}, } iter := collection.CreateIterator() for iter.HasNext() { fmt.Println("Item:", iter.Next()) }}
输出结果为:
Item: appleItem: bananacherry
扩展支持多种集合类型
你可以为其他数据结构实现相同的接口,比如 map、链表或树。只要它们实现了 CreateIterator 并返回 Iterator 接口,就能用同样的方式遍历。
例如,你有一个用户结构体列表,也可以写一个 UserSliceIterator,对外暴露一致的遍历方式,调用方无需关心底层是数组还是数据库查询结果。
基本上就这些。Go 的接口是非侵入式的,这让迭代器模式更容易落地。只需定义好行为,任何类型都可以按需实现,灵活又解耦。
以上就是如何用Golang实现迭代器模式遍历集合_Golang 迭代器模式使用示例的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1427724.html
微信扫一扫
支付宝扫一扫