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

java 设计模式_行为型_15迭代器模式

15.迭代器模式

定义:我们可以用相同的方式处理集合,无论它是列表还是数组,它都提供了一种迭代其元素而不用暴露其内部结构的机制,更重要的是,不同的类型的集合都可以使用相同的统一机制,这种机制则被称为 迭代器模式。
目的:提供一种顺序遍历聚合对象元素,而不暴露其内部实现的方法。
主要角色

  • Aggregate(抽象容器):负责提供创建具体迭代器角色的接口,对应于java.util.Collection接口。
  • Iterator(抽象迭代器):迭代器的抽象类,它定义遍历容器对象的操作以及返回对象的操作
  • ConcreteAggregate(具体容器):主要是可以实现内部不同的结构。但会暴露处理遍历容器的具体迭代器。
  • ConcreteIterator(具体迭代器):处理特定的具体容器类的具体迭代器,实际上对于每个容器具体容器,都必须实现一个具体的迭代器。

一、先是创建抽象容器,定义几个基本添加删除元素方法,以及迭代器

public interface Aggregate {// 添加元素void add(Object object);// 移除元素void remove(Object object);// 迭代器Iterator iterator();
}

二、创建抽象迭代器,遍历容器中的数据

public interface Iterator<E> {// 判断容器是否有值boolean hasNext();// 把游标执向下一个指针void next();// 当前遍历的数据E currentItem();
}

三、开始定义我们具体的容器了,内部定一个ArrayList容器,用来存放数据,当然这里大家也可以改成其他的容器 比如说用Vector 或者其他的 栈、树、图等

@NoArgsConstructor
@AllArgsConstructor
@Data
public class ConcreteAggregate implements Aggregate {private ArrayList arrayList = new ArrayList();@Overridepublic void add(Object object) {this.arrayList.add(object);}@Overridepublic void remove(Object object) {this.arrayList.remove(object);}@Overridepublic Iterator iterator() {return new ConcreteIterator(this.arrayList);}
}

四、就是实现具体的迭代器了

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ConcreteIterator<T> implements Iterator<T> {private int cursor; // 游标private ArrayList arrayList;@Overridepublic boolean hasNext() {return this.cursor != arrayList.size();}@Overridepublic void next() {cursor++;System.out.println("cursor = " + cursor);}@Overridepublic T currentItem() {if (cursor>=arrayList.size()){throw new NoSuchElementException();}T t =(T) arrayList.get(cursor);this.next();return t;}
}

五、迭代器测试

public class IteratorTest {public static void main(String[] args) {Aggregate aggregate = new ConcreteAggregate();aggregate.add("java");aggregate.add("c++");aggregate.add("php");aggregate.add("jsp");Iterator iterator = aggregate.iterator();while (iterator.hasNext()){System.out.println(iterator.currentItem());}}
}
http://www.xdnf.cn/news/14291.html

相关文章:

  • nginx 配置返回 文件大小
  • Go语言底层(四): 深入浅出Go语言的ants协程池
  • 第八章:排序
  • 高速隔直电容设计
  • 【Vue】v-model进阶+ref+nextTick
  • 计算机是怎么跑起来的第五章
  • Python3 学习(菜鸟)-02基本数据类型
  • 从 PPO、DPO 到 GRPO:大语言模型策略优化算法解析
  • HarmonyOS 布局优化
  • 【Zephyr 系列 24】设备日志、事件与远程调试机制设计:为每一块硬件留痕,助力稳定性分析
  • Cursor ReAct Agent技术架构
  • Python爬虫实战:研究RQ库相关技术
  • Modbus原理一文通:从基础到实现的全面解析
  • Python全栈开发:前后端分离项目架构详解
  • Nginx+keepalived主从,双主架构
  • Java大模型开发入门 (10/15):连接外部世界(下) - 端到端构建完整的RAG问答系统
  • 拓展:###单向循环链表###
  • 【MFC】编辑框、下拉框、列表控件
  • JavaScript基础-常用的鼠标事件
  • Bambu Studio 中的“回抽“与“装填回抽“的区别
  • Spark RDD 及性能调优
  • 案例:塔能科技智启某市光域,勾勒城市照明宏图
  • IEEE 802.16e 标准下的LDPC 码
  • 【知识图谱构建系列3】zero-shot的理念介绍
  • Vite 预构建机制深度解析(Vite缺点之一)
  • 深度理解 CLIP:连接图像与语言的桥梁
  • 从零开始的Conda环境配置
  • Java大模型开发入门 (11/15):让AI自主行动 - 初探LangChain4j中的智能体(Agents)
  • 【文献阅读】5%>100%: 打破视觉识别任务的完全微调的性能束缚
  • 20 - PPM模块