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

news/2024/9/25 17:20:08/

文章目录

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

十七、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_sliceimport ("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_slicetype 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_slicetype Iterator interface {hasNext() boolgetNext() *User
}type userIterator struct {index intusers []*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_slicetype User struct {ID   stringName string
}

http://www.ppmy.cn/news/1450279.html

相关文章

2023下半年软件设计师上午题——冒泡排序

快速排除法&#xff0c;根据冒泡排序特性&#xff0c;每一趟排序都会确实最大/最小值&#xff0c;故升序两趟后&#xff0c;最后两个元素应该是已经排序好的第二大&#xff0c;和最大的元素&#xff0c;所以排除B,D&#xff0c;再因为每次排序都会两两交换&#xff0c;所以排除…

更深层次理解传输层两协议【UDP | TCP】【UDP 缓冲区 | TCP 8种策略 | 三次握手四次挥手】

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;Linux_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 再谈端口号 端口号的返回…

前沿科技应用:AIGC技术的广泛渗透

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

MacBook Pro 原生安装 Ubuntu 24.04 ARM 版

趁着休假整理家里闲置的设备&#xff0c;看到了一台许久不用的 M2 芯片的 MacBook Pro&#xff0c;想着或许应该把它改造成 ARMv64 的 CI/CD 构建机&#xff0c;于是就有了这篇文章。 本篇文章适用于 M1、M2 全系列的设备&#xff0c;包括&#xff1a;MacBook Air、MacBook Pr…

焊接机器人-常见焊接工艺参数

常见焊接工艺参数 常见焊缝平焊立焊 常见焊接工艺调试方法注意事项 常见焊缝 常见的焊缝一般见于不需要坡口焊的规则钢构件&#xff1a;如H型钢、H型牛角杠、T型梁、弧形梁等。 平焊 参数Value电流(安培)200A电压(伏特 )20V摆弧-振幅(毫米)4-6mm摆弧- 频率(Hz)1Hz摆弧- 两侧…

【DevOps】怎么找合适的Docker镜像?

目录 一、Docker Hub介绍 主要特点和功能 使用场景 二、怎么找合适的镜像 步骤 1: 访问 Docker Hub 步骤 2: 使用搜索功能 步骤 3: 分析搜索结果 步骤 4: 阅读详细描述 步骤 5: 下载并使用镜像 例子 三、怎么样使用国内镜像加速 常用的国内 Docker 镜像加速器地址 …

在线的调试器pythontutor,支持C/C++

1. 背景介绍 对于C语言的学习最复杂的可能无疑就是指针的&#xff0c;指针因其灵活、晦涩难懂等特点而出名&#xff0c;本文并不介绍利用gdb的角度去分析它&#xff0c;而是通过一个在线网站而分析&#xff1b; 2.C代码调试 3. C代码调试 4在线网站 https://pythontutor.com/…

C++奇迹之旅:C++内存管理的机制(进阶篇)

文章目录 &#x1f4dd;new和delete操作自定义类型&#x1f320; operator new与operator delete函数&#x1f309;operator new与operator delete函数 &#x1f320;new和delete的实现原理&#x1f309;内置类型&#x1f309;自定义类型 &#x1f320;定位new表达式(placement…