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

文章目录

  • [十七、iterator 迭代器模式](#十七、iterator 迭代器模式)
    • [17.1 user_slice](#17.1 user_slice)
      • [17.1.1 collection_test.go](#17.1.1 collection_test.go)
      • [17.1.2 collection.go](#17.1.2 collection.go)
      • [17.1.3 iterator.go](#17.1.3 iterator.go)
      • [17.1.4 user.go](#17.1.4 user.go)

十七、iterator 迭代器模式

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

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

17.1 user_slice

bash 复制代码
├── collection.go
├── collection_test.go
├── iterator.go
├── readme.md
└── user.go

17.1.1 collection_test.go

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

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

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

go 复制代码
package _71user_slice

type User struct {
	ID   string
	Name string
}
相关推荐
晨米酱6 小时前
JavaScript 中"对象即函数"设计模式
前端·设计模式
数据智能老司机11 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机12 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机12 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机12 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
使一颗心免于哀伤13 小时前
《设计模式之禅》笔记摘录 - 21.状态模式
笔记·设计模式
数据智能老司机1 天前
精通 Python 设计模式——创建型设计模式
python·设计模式·架构
数据智能老司机1 天前
精通 Python 设计模式——SOLID 原则
python·设计模式·架构
烛阴1 天前
【TS 设计模式完全指南】懒加载、缓存与权限控制:代理模式在 TypeScript 中的三大妙用
javascript·设计模式·typescript
李广坤2 天前
工厂模式
设计模式