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

22.行为型 - 迭代器模式 (Iterator Pattern)

迭代器模式 (Iterator Pattern)

迭代器模式是我们学习一个设计时很少用到的、但编码实现时却经常使用到的行为型设计模式。在绝大多数编程语言中, 迭代器已经成为一个基础的类库, 直接用来遍历集合对象。在平时开发中, 我们更多的是直接使用它, 很少会从零去实现一个迭代器。

迭代器模式(Iterator pattern)又叫游标(Cursor)模式, 它的原始定义是:迭代器提供一种对容器对象中的各个元素进行访问的方法, 而又不需要暴露该对象的内部细节。

UML类图

Pasted image 20231208120347

代码实例

1.迭代器抽象

public interface Iterator {public boolean hasNext();public Object next();
}

2.容器接口 提供获取迭代器方法

public interface Container {public Iterator getIterator();
}

3.容器实现 和 迭代器 实现

public class NameRepository implements Container {public String[] names = {"Robert" ,  "John" , "Julie" ,  "Lora"};@Overridepublic Iterator getIterator() {return new NameIterator();}//迭代器实现,  限制数据只能内部访问;private class NameIterator implements Iterator {int index = 0;@Overridepublic boolean hasNext() {if(index < names.length){return true;}return false;}// 返回下一个元素,  并且游标向下移动@Overridepublic Object next() {if(this.hasNext()){return names[index++];}return null;}     }
}

4.测试

public static void main(String[] args) {NameRepository namesRepository = new NameRepository();for(Iterator iter = namesRepository.getIterator(); iter.hasNext();){String name = (String)iter.next();System.out.println("Name : " + name);}  
}

迭代器模式总结

关键角色

  1. 抽象集合(Aggregate)角色:用于存储和管理元素对象, 定义存储、添加、删除集合元素的功能, 并且声明了一个createIterator()方法用于创建迭代器对象。
  2. 具体集合(ConcreteAggregate)角色:实现抽象集合类, 返回一个具体迭代器的实例。
  3. 抽象迭代器(Iterator)角色:定义访问和遍历聚合元素的接口, 通常包含 hasNext()、next() 等方法。
    • hasNext()函数用于判断集合中是否还有下一个元素
    • next() 函数用于将游标后移一位元素
    • currentItem() 函数, 用来返回当前游标指向的元素
  4. 具体迭代器(Concretelterator)角色:实现抽象迭代器接口中所定义的方法, 完成对集合对象的遍历, 同时记录遍历的当前位置。

迭代器模式优缺点

1) 迭代器的优点:

  • 迭代器模式支持以不同方式遍历一个集合对象, 在同一个集合对象上可以定义多种遍历方式. 在迭代器模式中只需要用一个不同的迭代器来替换原有的迭代器, 即可改变遍历算法, 也可以自己定义迭代器的子类以支持新的遍历方式.
  • 迭代器简化了集合类。由于引入了迭代器, 在原有的集合对象中不需要再自行提供数据遍历等方法, 这样可以简化集合类的设计。
  • 在迭代器模式中, 由于引入了抽象层, 增加新的集合类和迭代器类都很方便, 无须修改原有代码, 满足 "基于接口编程而非实现" 和 "开闭原则" 的要求。

2) 迭代器的缺点:

  • 由于迭代器模式将存储数据和遍历数据的职责分离, 增加了类的个数, 这在一定程度上增加了系统的复杂性。
  • 抽象迭代器的设计难度较大, 需要充分考虑到系统将来的扩展.`

迭代器模式适用场景

  • 减少程序中重复的遍历代码

    对于放入一个集合容器中的多个对象来说, 访问必然涉及遍历算法。如果我们不将遍历算法封装到容器里(比如, List、Set、Map 等), 那么就需要使用容器的人自行去实现遍历算法, 这样容易造成很多重复的循环和条件判断语句出现, 不利于代码的复用和扩展, 同时还会暴露不同容器的内部结构。而使用迭代器模式是将遍历算法作为容器对象自身的一种“属性方法”来使用, 能够有效地避免写很多重复的代码, 同时又不会暴露内部结构。

  • 当需要为遍历不同的集合结构提供一个统一的接口时或者当访问一个集合对象的内容而无须暴露其内部细节的表示时。

    迭代器模式把对不同集合类的访问逻辑抽象出来, 这样在不用暴露集合内部结构的情况下, 可以隐藏不同集合遍历需要使用的算法, 同时还能够对外提供更为简便的访问算法接口。

http://www.jsqmd.com/news/402578/

相关文章:

  • 健康教育智能客服助手的架构设计与性能优化实战
  • ChatGPT代理模式深度解析:如何构建高可用的AI辅助开发架构
  • ChatTTS 预训练实战:从零构建高效对话生成模型
  • 10、python学习笔记之面向对象程序设计
  • 自动化毕业设计中的效率瓶颈与工程化解法:从脚本到可维护系统
  • 永辉超市卡回收避坑指南 - 京顺回收
  • 智能客服回复系统入门指南:从零搭建高可用对话引擎
  • ChatTTS在Win10环境下的运行错误分析与高效解决方案
  • 基于粒子群优化算法PSO的超透镜设计与分析——宽带消色差性能的Matlab核心程序与FDTD仿真研究
  • 人工智能专业毕业设计实战指南:从选题到部署的完整技术闭环
  • 多媒体网络:支持多媒体的网络
  • 2/22
  • 文本关键字搜索的本地离线开源大模型梳理
  • Python数据分析项目实战(004)——配置PyCharm图文详解教程
  • 人工智能毕业设计项目实战:从选题到部署的全链路技术指南
  • 分期乐购物额度闲置不用?这样回收高效又安全 - 可可收
  • Flutter三方库适配OpenHarmony【flutter_speech】— 总结与未来展望
  • ComfyUI关键词翻译文本插件开发实战:提升多语言工作流效率
  • 2026河北粘钉一体机,口碑排行助你选好机,可靠的粘钉一体机直销厂家解析品牌实力与甄选要点 - 品牌推荐师
  • ChatTTS本地离线版本实战:从模型部署到生产环境优化
  • Flutter三方库适配OpenHarmony【flutter_speech】— 生产环境部署与发布
  • 基于Python构建个人知识库Chatbot:从数据清洗到智能问答实战
  • Flutter三方库适配OpenHarmony【flutter_speech】— 与其他 HarmonyOS Kit 的联动
  • SpringBoot与Vue整合智能客服:技术选型与实战避坑指南
  • 生成式AI智能客服开发实战:从架构设计到生产环境避坑指南
  • 腾讯IM智能客服AI辅助开发实战:从架构设计到性能优化
  • python+Vue3计算机学院校友信息活动网站的设计与实现(编号:66613294)
  • 我与Ling Studio的72小时:一个全栈开发者的真实手记
  • python+Vue3社区医院药店药品进销存管理系统(编号:23661210)
  • 教授简陋的投票统计系统(改良版)