【设计模式】17、iterator 迭代器模式

十七、iterator 迭代器模式

https://refactoringguru.cn/design-patterns/iterator

为了集合数据的安全性, 或方便迭代, 可以用迭代器接口. 屏蔽复杂的内部逻辑, 外部只能使用迭代器遍历

17.1 user_slice

├── collection.go
├── collection_test.go
├── iterator.go
├── readme.md
└── user.go

17.1.1 collection_test.go

package _71user_slice

import (
	"fmt"
	"testing"
)

/*
=== RUN   TestCollection
1 Tom
2 Jack
--- PASS: TestCollection (0.00s)
PASS
*/
func TestCollection(t *testing.T) {
	c := UserCollection{users: []*User{&User{"1", "Tom"}, {"2", "Jack"}}}
	iter := c.createIterator()
	for iter.hasNext() {
		v := iter.getNext()
		fmt.Println(v.ID, v.Name)
	}
}

17.1.2 collection.go

package _71user_slice

type Collection interface {
	createIterator() Iterator
}

type UserCollection struct {
	users []*User
}

func (uc *UserCollection) createIterator() Iterator {
	return &userIterator{
		users: uc.users,
	}
}

17.1.3 iterator.go

package _71user_slice

type Iterator interface {
	hasNext() bool
	getNext() *User
}

type userIterator struct {
	index int
	users []*User
}

func (ui *userIterator) hasNext() bool {
	return ui.index < len(ui.users)
}

func (ui *userIterator) getNext() *User {
	if ui.hasNext() {
		v := ui.users[ui.index]
		ui.index++
		return v
	}
	return nil
}

17.1.4 user.go

package _71user_slice

type User struct {
	ID   string
	Name string
}

相关推荐

  1. 设计模式17iterator 模式

    2024-05-03 06:18:10       29 阅读
  2. 设计模式模式Iterator

    2024-05-03 06:18:10       37 阅读
  3. 设计模式——模式Iterator

    2024-05-03 06:18:10       32 阅读
  4. 模式Iterator

    2024-05-03 06:18:10       61 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-03 06:18:10       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-03 06:18:10       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-03 06:18:10       87 阅读
  4. Python语言-面向对象

    2024-05-03 06:18:10       96 阅读

热门阅读

  1. 富格林:有效控制暗箱阻挠被骗

    2024-05-03 06:18:10       33 阅读
  2. UI自动化与接口自动化比较

    2024-05-03 06:18:10       35 阅读
  3. 旅游新策略,共享与补贴助力地方经济繁荣

    2024-05-03 06:18:10       37 阅读
  4. 漫谈:C语言 奇葩的指针定义规则

    2024-05-03 06:18:10       30 阅读
  5. 分布式八股文

    2024-05-03 06:18:10       30 阅读
  6. salesforce vscode 获取profile metadata所有配置内容

    2024-05-03 06:18:10       32 阅读
  7. Github2024-05-02开源项目日报 Top10

    2024-05-03 06:18:10       30 阅读
  8. K8s: Helm搭建mongodb集群(1)

    2024-05-03 06:18:10       26 阅读
  9. yarn的安装和使用

    2024-05-03 06:18:10       35 阅读
  10. 8.k8s中的名称空间namespace

    2024-05-03 06:18:10       28 阅读