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

文章目录

  • 十七、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.mzph.cn/pingmian/5925.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

axios 中文文档 翻译

0.18.0的版本更新有一段时间了&#xff0c;使用起来跟原先基本没有什么变化。但是增加了一些功能&#xff0c;例如错误处理的辨别&#xff0c;于07-06-2018重新翻译和校验了该翻译&#xff0c;更正了一些错别字和表达不准的地方&#xff0c;但是难免仍有错误&#xff0c;欢迎指…

GitLab服务器的搭建

GitLab服务器的搭建 为公司搭建一台代码托管服务器 服务器规格&#xff1a;2vCPUs4GiB20G 操作系统&#xff1a;RockyLinux8.8 下载软件 gitlab官网&#xff1a;http://about.gitlab.com 在官网下载比较麻烦&#xff0c;推荐从《清华大学开源软件镜像站》下载 清华大学开…

DRF序列化器基本使用

DRF序列化器基本使用 对用户提交的数据进行校验从数据库中取到数据进行序列化&#xff0c;转化为JSON格式返还给前端 1 序列化数据 1.1 Serializer # models.py from django.db import modelsclass Depart(models.Model):"""部门表"""title …

[前端] Bearer令牌

Bearer令牌是一种常用的认证方式&#xff0c;特别是在实现OAuth 2.0协议时。Bearer令牌本质上是一个安全字符串&#xff0c;可以是任意的字符序列&#xff0c;用以证明持有者&#xff08;Bearer&#xff09;有权访问特定的资源。其名称“Bearer”意味着任何持有该令牌的人都可以…

38-3 Web应用防火墙 - 安装配置WAF

首先需要安装Centos 7 虚拟机:Centos7超详细安装教程_centos7安装教程-CSDN博客 安装配置WAF 在桌面环境中,右键点击打开终端,首先执行以下步骤: 1)安装必要的工具: 输入命令: sudo su yum install -y wget epel-release 2)第二步,安装依赖工具,输入以下命令: y…

阿里云CentOS7 打开/关闭防火墙 开放端口

#查看防火墙状态# systemctl status firewalld #关闭防火墙# systemctl stop firewalld #打开防火墙# systemctl start firewalld #添加开放2375端口# firewall-cmd --add-port2375/tcp --permanent #重载入添加的端口# firewall-cmd --reload #查询2375端口是否开启成…

【嵌入式AI开发】轻量化卷积神经网络Mnasnet(神经架构搜索)详解

前言:谷歌轻量化卷积神经网络Mnasnet,介于MobileNet V2和V3之间。使用多目标优化的目标函数,兼顾速度和精度,其中速度用真实手机推断时间衡量。提出分层的神经网络架构搜索空间,将卷积神经网络分解为若干block,分别搜索各自的基本模块,保证层结构多样性。 CVPR2019论文…

深入理解网络原理1

文章目录 前言一、网络初识1.1 IP地址1.2 端口号1.3 协议1.4 五元组1.5 协议分层 二、TCP/IP五层协议三、封装和分用四、客户端vs服务端4.1 交互模式4.2 常见的客户端服务端模型4.3 TCP和UDP差别 前言 随着时代的发展&#xff0c;越来越需要计算机之间互相通信&#xff0c;共享…

大模型咨询培训叶梓老师:数千大模型,1张GPU搞定——UC Berkeley提出全新微调方法S-LoRA

在大语言模型&#xff08;LLM&#xff09;的部署中&#xff0c;通常采用“预训练-微调”范式。为了适应多样化的任务&#xff0c;参数高效的微调方法如低秩适应&#xff08;LoRA&#xff09;被广泛使用。然而&#xff0c;如何高效地服务这些微调变体仍然是一个未探索的问题。S-…

VBA技术资料MF147:从Excel运行PowerPoint演示文稿

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

redis ZRANGE 使用最详细文档

环境&#xff1a; redis_version:7.2.2 本文参考 redis 官方文档1 语法 ZRANGE key start stop [BYSCORE | BYLEX] [REV] [LIMIT offset count] [WITHSCORES]参数含义key是有序集合的键名start stop在不同语境下&#xff0c;可用值不一样BYSCORE | BYLEX按照分数查询 | 相…

OceanBase 分布式数据库【信创/国产化】- OceanBase 数据库的发展历程

本心、输入输出、结果 文章目录 OceanBase 分布式数据库【信创/国产化】- OceanBase 数据库的发展历程前言OceanBase 数据更新架构OceanBase 数据库的发展历程OceanBase 分布式数据库【信创/国产化】- OceanBase 数据库的发展历程 编辑 | 简简单单 Online zuozuo 地址 | https:…

React 15~18每个阶段更新了什么

文章目录 React 15React 16React 17 试验性并发模式React 18 React 15 React.createClass &#xff08;弃用&#xff09; class 组件 函数组件&#xff08;无状态、纯UI组件&#xff09; 堆栈diff&#xff08;同步更新state1->state2->state3…、每个更新过程不可中断&a…

【SQL每日一练】统计复旦用户8月练题情况

文章目录 题目一、分析二、题解1.使用case...when..then2.使用if 题目 现在运营想要了解复旦大学的每个用户在8月份练习的总题目数和回答正确的题目数情况&#xff0c;请取出相应明细数据&#xff0c;对于在8月份没有练习过的用户&#xff0c;答题数结果返回0. 示例代码&am…

13、Flink 的 Operator State 详解

1.算子状态 (Operator State) 算子状态&#xff08;或者非 keyed 状态&#xff09;是绑定到一个并行算子实例的状态&#xff0c;Kafka consumer 每个并行实例维护了 topic partitions 和偏移量的 map 作为它的算子状态。 当并行度改变的时候&#xff0c;算子状态支持将状态重…

Excel 批量获取sheet页名称,并创建超链接指向对应sheet页

参考资料 用GET.WORKBOOK函数实现excel批量生成带超链接目录且自动更新 目录 一. 需求二. 名称管理器 → 自定义获取sheet页名称函数三. 配合Index函数&#xff0c;获取所有的sheet页名称四. 添加超链接&#xff0c;指向对应的sheet页 一. 需求 ⏹有如下Excel表&#xff0c;需…

Java 正则表达式代码演示

正则表达式&#xff08;Regular Expressions&#xff09;是一种用于描述字符串匹配模式的强大工具。在 Java 中&#xff0c;可以使用 java.util.regex 包来处理正则表达式。 文章目录 一、基本用法二、高级用法 一、基本用法 导入正则表达式类: import java.util.regex.Patte…

Easy TCP Analysis上线案例库功能,为用户提供一个TCP抓包分析案例分享学习的平台

​案例库&#xff0c;提供给用户相互分享TCP抓包故障排查案例或是经典学习案例的功能&#xff0c;任何用户都可从案例库查看其它用户分享的案例&#xff0c;每个用户也都可以上传自己的案例&#xff0c;经过平台审核去重即可展示在案例库。 对于学习&#xff0c;最典型的三次握…

webscoket+webrtc实现语音通话

1.项目方案 前端采用webrtc创建音频上下文&#xff0c;后创建音频源输入和音频处理器&#xff0c;连接音频输入与处理器&#xff0c;处理器再连接到音频输出&#xff08;扬声器&#xff09;&#xff0c;再通过事件获取音频数据&#xff0c;把音频数据转换成字节数据通过webscok…

【Docker学习】docker start深入研究

docker start也是很简单的命令。但因为有了几个选项&#xff0c;又变得复杂&#xff0c;而且... 命令&#xff1a; docker container start 描述&#xff1a; 启动一个或多个已停止的容器。 用法&#xff1a; docker container start [OPTIONS] CONTAINER [CONTAINER...] 别名&…