当前位置: 首页 > news >正文

《golang设计模式》第三部分·行为型模式-04-迭代器模式(Iterator)

文章目录

  • 1. 概念
    • 1.1 角色
    • 1.2 类图
  • 2. 代码示例
    • 2.1 需求
    • 2.2 代码
    • 2.3 类图

1. 概念

迭代器(Iterator)能够在不暴露聚合体内部表示的情况下,向客户端提供遍历聚合元素的方法。

1.1 角色

  • InterfaceAggregate(抽象聚合):定义存储、添加、删除聚合元素以及创建迭代器对象的接口
  • ConcreteAggregate(具体聚合):实现抽象聚合类。它的方法可以返回一个具体迭代器的实例
  • Iterator(抽象迭代器):定义访问和遍历聚合元素的接口,通常包含 hasNext()、next() 等方法
  • Concretelterator(具体迭代器):实现抽象迭代器接口中所定义的方法,完成对聚合对象的遍历,记录遍历的当前位置。

1.2 类图

Client
«interface»
Iterator
+HasNext() : bool
+First()
+IsDone()
+Next() : interface
+CurrentItem()
«interface»
Aggregate
+CreateIterator() : Iterator
ConcreteIterator
+HasNext() : bool
+First()
+IsDone()
+Next() : interface
+CurrentItem()
ConcreteAggregate
+CreateIterator() : Iterator

2. 代码示例

2.1 需求

实例化一个具体聚合,创建一个迭代器实例,用迭代器遍历这个聚合。

迭代器通常还会有查看首元素、尾元素、指针位置等方法,有兴趣可以自己试一下,这个简单示例里不写了。

2.2 代码

  • 代码
package mainimport "fmt"// 定义抽象迭代器
type Iterator interface {HasNext() boolNext() interface{}
}// 定义具体迭代器
type ConcreteIterator struct {//它关联具体聚合aggregate *ConcreteAggregateindex     int
}// 定义方法,查看迭代是否结束
func (i *ConcreteIterator) HasNext() bool {return i.index < len(i.aggregate.items)
}// 定义方法,返回下一个节点
func (i *ConcreteIterator) Next() interface{} {if i.HasNext() {item := i.aggregate.items[i.index]i.index++return item}return nil
}// 定义抽象聚合
type Aggregate interface {CreateIterator() IteratorAddItem(item interface{})
}// 定义具体聚合
type ConcreteAggregate struct {items []interface{}
}// 定义方法,创建迭代器
func (a *ConcreteAggregate) CreateIterator() Iterator {return &ConcreteIterator{aggregate: a}
}// 定义方法,添加item(为了测试方便,和迭代器方法无关)
func (a *ConcreteAggregate) AddItem(item interface{}) {a.items = append(a.items, item)
}func main() {//实例化一个聚合,加入三个Item,他们的类型可以不同var aggregate Aggregateaggregate = &ConcreteAggregate{}aggregate.AddItem("Item 1")aggregate.AddItem(2)aggregate.AddItem("Item 3")//实例化一个迭代器iterator := aggregate.CreateIterator()//验证结果for iterator.HasNext() {item := iterator.Next()fmt.Println(item)}
}
  • 输出
Item 1
2
Item 3

2.3 类图

Client
«interface»
Iterator
+HasNext() : bool
+Next() : interface
«interface»
Aggregate
+CreateIterator() : Iterator
+AddItem(item:interface)
ConcreteIterator
+*ConcreteAggregate aggregate
+Int index
+HasNext() : bool
+Next() : interface
ConcreteAggregate
+[]interface items
+CreateIterator() : Iterator
+GetItem(index int) : interface
+AddItem(item interface)

在这里插入图片描述

http://www.lryc.cn/news/219754.html

相关文章:

  • python加上ffmpeg实现音频分割
  • LLM之Prompt(一):5个Prompt高效方法在文心一言3.5的测试对比
  • TreeBERT:基于树的编程语言预训练模型。
  • 生成小程序的二维码的base64码(中间logo可以自定义)
  • 【音视频 | Ogg】Ogg封装格式详解——包含Ogg封装过程、数据包(packet)、页(page)、段(segment)等
  • ubuntu 22.04 安装ros2 iron
  • PHP语言、B/S手术麻醉临床信息管理系统源码
  • Win11安装网络打印机
  • 逆向学习记录(3)工具介绍jadx、gda和jeb
  • C#,数值计算——偏微分方程,Mglin的计算方法与源程序
  • 一机服务万人,拓世法宝AI智能商业数字人一体机,解锁文旅新表达
  • 【源码解析】聊聊SpringBean是如何初始化和创建
  • 【0基础学Java第六课】-- 数组的定义与使用
  • 后台项目Gradle打包jar,不包含依赖jar并放到外部路径
  • NSSCTF web刷题记录4
  • 什么是大模型?一文读懂大模型的基本概念
  • 数据结构之队的实现
  • 【实战Flask API项目指南】之三 路由和视图函数
  • mediasoup udp端口分配策略
  • 山西电力市场日前价格预测【2023-11-07】
  • Microsoft Dynamics 365 CE 扩展定制 - 5. 外部集成
  • 手机升级STM32单片机,pad下载程序,手机固件升级单片机,局域网程序下载,STM32单片机远程下载升级
  • 【漏洞复现】weblogic-SSRF漏洞
  • FreeSWTCH dialplan check nosdp
  • 微信小程序案例3-1 比较数字
  • 哈希表----数据结构
  • 可达矩阵-邻接矩阵-以及有向图的python绘制
  • react typescript @别名的使用
  • C++性能优化笔记-6-C++元素的效率差异-7-类型转换
  • c#中switch常用模式