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

行为模式3.迭代器模式

 行为型模式

  1. 模板方法模式(Template Method Pattern)
  2. 命令模式(Command Pattern)
  3. 迭代器模式(Iterator Pattern)
  4. 观察者模式(Observer Pattern)
  5. 中介者模式(Mediator Pattern)
  6. 备忘录模式(Memento Pattern)
  7. 解释器模式(Interpreter Pattern)
  8. 状态模式(State Pattern)
  9. 策略模式(Strategy Pattern)
  10. 职责链模式(Chain of Responsibility Pattern)
  11. 访问者模式(Visitor Pattern)

迭代器模式(Iterator Pattern) 是一种行为型设计模式,它提供一种顺序访问集合对象元素的方式,而不暴露集合的内部结构。迭代器模式允许客户端按顺序访问集合中的元素,而无需直接访问集合本身。通常,当你有一个集合(如列表、队列、栈等),你希望对集合中的元素进行迭代,但又不想暴露其内部结构时,可以使用迭代器模式。

迭代器模式的主要组成部分

  1. Iterator(迭代器):迭代器接口,定义了遍历集合元素的方法,如 hasNext() 和 next()
  2. ConcreteIterator(具体迭代器):实现了Iterator接口,并定义了如何遍历具体集合中的元素。
  3. Aggregate(聚合类,也叫集合类):集合接口,提供创建迭代器对象的方法。
  4. ConcreteAggregate(具体聚合类):实现了Aggregate接口,定义了如何存储和获取集合元素。

迭代器模式的工作流程

  1. 创建迭代器:客户端通过聚合类获取迭代器实例。
  2. 遍历集合:客户端通过迭代器的方法遍历集合中的元素,使用 hasNext() 判断是否有下一个元素,使用 next() 获取当前元素。
  3. 不暴露集合的内部实现:迭代器模式让客户端能够通过标准的接口访问集合元素,而不需要知道集合的内部结构。

迭代器模式的优点

  • 封装性:集合的实现细节对客户端是隐藏的,客户端不需要关心集合如何存储数据。
  • 灵活性:可以对不同的集合类型使用相同的迭代方式。
  • 单一职责:聚合类负责存储数据,迭代器类负责遍历数据,这样做可以避免集合类本身过于复杂。

Java 示例代码

import java.util.ArrayList;
import java.util.List;// 1. 定义Iterator接口
interface Iterator {boolean hasNext();  // 判断是否有下一个元素Object next();      // 获取下一个元素
}// 2. 定义Aggregate接口(集合接口)
interface Aggregate {Iterator createIterator();  // 创建一个迭代器
}// 3. ConcreteIterator(具体迭代器)实现Iterator接口
class ConcreteIterator implements Iterator {private List<Object> items;private int position = 0;public ConcreteIterator(List<Object> items) {this.items = items;}@Overridepublic boolean hasNext() {return position < items.size();}@Overridepublic Object next() {if (this.hasNext()) {return items.get(position++);}return null;}
}// 4. ConcreteAggregate(具体集合类)实现Aggregate接口
class ConcreteAggregate implements Aggregate {private List<Object> items = new ArrayList<>();public void addItem(Object item) {items.add(item);}@Overridepublic Iterator createIterator() {return new ConcreteIterator(items);}
}// 5. 客户端使用迭代器遍历集合
public class IteratorPatternDemo {public static void main(String[] args) {// 创建一个具体的集合ConcreteAggregate aggregate = new ConcreteAggregate();aggregate.addItem("Item 1");aggregate.addItem("Item 2");aggregate.addItem("Item 3");aggregate.addItem("Item 4");// 创建迭代器Iterator iterator = aggregate.createIterator();// 使用迭代器遍历集合while (iterator.hasNext()) {System.out.println(iterator.next());}}
}

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

相关文章:

  • 第8章 DMA控制器
  • 后端java开发路由接口并部署服务器(四)
  • 检索增强生成 和思维链 结合: 如何创建检索增强思维链 (RAT)?
  • 在 SQL 中,区分 聚合列 和 非聚合列(nonaggregated column)
  • 单元测试3.0+ @RunWith(JMockit.class)+mock+injectable+Expectations
  • STM32第十一课:STM32-基于标准库的42步进电机的简单IO控制(附电机教程,看到即赚到)
  • MotionCtrl: A Unified and Flexible Motion Controller for Video Generation 论文解读
  • LINUX线程操作
  • 在Lua中,Metatable元表如何操作?
  • 4D LUT: Learnable Context-Aware 4D LookupTable for Image Enhancement
  • 瑞芯微rk3568平台 openwrt系统适配ffmpeg硬件解码(rkmpp)
  • 使用SuperMap制作地形图的详细教程
  • PHP Array:精通数组操作
  • 【使用命令配置java环境变量永久生效与脚本切换jdk版本】
  • STM32-笔记32-ESP8266作为服务端
  • RAG(Retrieval-Augmented Generation,检索增强生成)流程
  • 【Python学习(六)——While、for、循环控制、指数爆炸】
  • 解释一下:运放的输入失调电流
  • 力扣hot100——二分查找
  • PHP 使用集合 处理复杂数据 提升开发效率
  • Unity 对Sprite或者UI使用模板测试扣洞
  • unity学习3:如何从github下载开源的unity项目
  • PHP后执行php.exe -v命令报错并给出解决方案
  • CDP集群安全指南-动态数据加密
  • 【shell编程】报错信息:Undefined Variable(包含6种解决方法)
  • Dubbo扩展点加载机制
  • unity学习7:unity的3D项目的基本操作: 坐标系
  • PyTorch框架——基于深度学习EfficientDeRain神经网络AI去雨滴图像增强系统
  • 写一个类模板三个模板参数K,V,M,参数是函数(函数参数、lambda传参、函数指针)
  • 国内Ubuntu环境Docker部署Stable Diffusion入坑记录