Go设计模式之迭代器模式讲解和代码示例

Dulcea ·
更新时间:2024-05-16
· 599 次阅读

目录

Go 迭代器模式讲解和代码示例

示例

collection.go: 集合

userCollection.go: 具体集合

iterator.go: 迭代器

userIterator.go: 具体迭代器

user.go: 客户端代码

main.go: 客户端代码

output.txt: 执行结果

Go 迭代器模式讲解和代码示例

在迭代器的帮助下, 客户端可以用一个迭代器接口以相似的方式遍历不同集合中的元素。

示例

迭代器模式的主要思想是将集合背后的迭代逻辑提取至不同的、 名为迭代器的对象中。 此迭代器提供了一种泛型方法, 可用于在集合上进行迭代, 而又不受其类型影响。

collection.go: 集合 package main type Collection interface { createIterator() Iterator } userCollection.go: 具体集合 package main type UserCollection struct { users []*User } func (u *UserCollection) createIterator() Iterator { return &UserIterator{ users: u.users, } } iterator.go: 迭代器 package main type Iterator interface { hasNext() bool getNext() *User } userIterator.go: 具体迭代器 package main type UserIterator struct { index int users []*User } func (u *UserIterator) hasNext() bool { if u.index < len(u.users) { return true } return false } func (u *UserIterator) getNext() *User { if u.hasNext() { user := u.users[u.index] u.index++ return user } return nil } user.go: 客户端代码 package main type User struct { name string age int } main.go: 客户端代码 package main import "fmt" func main() { user1 := &User{ name: "a", age: 30, } user2 := &User{ name: "b", age: 20, } UserCollection := &UserCollection{ users: []*User{user1, user2}, } iterator := UserCollection.createIterator() for iterator.hasNext() { user := iterator.getNext() fmt.Printf("User is %+v \n", user) } } output.txt: 执行结果

User is &{name:a age:30} 
User is &{name:b age:20} 

到此这篇关于Go设计模式之迭代器模式讲解和代码示例的文章就介绍到这了,更多相关Go 迭代器模式内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!



迭代 GO 示例 迭代器

需要 登录 后方可回复, 如果你还没有账号请 注册新账号