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

设计模式——迭代器模式(Iterator)

迭代器模式(Iterator Pattern)是一种行为设计模式,它使得我们能够顺序地访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。迭代器模式为遍历不同的聚合结构提供了一个统一的接口,使得客户端代码可以独立于聚合对象的变化。

迭代器模式结构

迭代器模式主要由以下几个角色组成:

  1. 迭代器(Iterator):定义访问和遍历元素的接口。
  2. 具体迭代器(Concrete Iterator):实现迭代器接口,并跟踪遍历中的当前位置。
  3. 聚合(Aggregate):定义创建迭代器对象的接口。
  4. 具体聚合(Concrete Aggregate):实现聚合接口,返回一个具体迭代器的实例。
  5. 客户端(Client):持有对聚合对象和迭代器的引用,并调用迭代器的接口来遍历聚合对象。

迭代器模式优点

  1. 支持以不同方式遍历一个聚合:通过提供不同的迭代器,可以支持不同的遍历方式。
  2. 简化聚合的接口:聚合对象不再需要暴露其内部表示,只需要提供一个创建迭代器的方法。
  3. 对聚合对象的修改更加安全:因为客户端代码是通过迭代器来访问聚合对象的,所以聚合对象的内部表示可以被隐藏和保护起来。

迭代器模式示例

假设我们有一个BookCollection(书籍集合)类,它包含多个Book对象。我们想要遍历这个集合并访问其中的每一本书。我们可以使用迭代器模式来实现这个功能。

聚合接口和具体聚合
// 聚合接口
interface BookCollection {Iterator<Book> createIterator();
}// 具体聚合
class MyBookCollection implements BookCollection {private List<Book> books = new ArrayList<>();// 添加书籍到集合中public void addBook(Book book) {books.add(book);}// 创建迭代器@Overridepublic Iterator<Book> createIterator() {return new BookIterator(books.iterator());}
}
迭代器接口和具体迭代器
// 迭代器接口
interface Iterator<T> {boolean hasNext();T next();
}// 具体迭代器
class BookIterator implements Iterator<Book> {private Iterator<Book> iterator;public BookIterator(Iterator<Book> iterator) {this.iterator = iterator;}@Overridepublic boolean hasNext() {return iterator.hasNext();}@Overridepublic Book next() {return iterator.next();}
}
客户端代码
// 客户端代码
public class Client {public static void main(String[] args) {BookCollection bookCollection = new MyBookCollection();bookCollection.addBook(new Book("Java设计模式"));bookCollection.addBook(new Book("C++编程思想"));// 获取迭代器并遍历集合Iterator<Book> iterator = bookCollection.createIterator();while (iterator.hasNext()) {Book book = iterator.next();System.out.println(book.getTitle());}}
}// Book类(示例用)
class Book {private String title;public Book(String title) {this.title = title;}public String getTitle() {return title;}
}

在上面的示例中,我们定义了一个BookCollection接口和一个MyBookCollection具体聚合类,以及一个Iterator接口和一个BookIterator具体迭代器类。客户端代码通过调用MyBookCollectioncreateIterator方法来获取一个迭代器,并使用这个迭代器来遍历集合中的书籍。这样,我们就实现了迭代器模式。

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

相关文章:

  • 在k8s中安装Grafana并对接Prometheus,实现k8s集群监控数据的展示
  • 【JavaScript】内置对象 - 数组对象 ③ ( 数组反转 - reverse 方法 | 数组排序 - sort 方法 | 自定义数组排序规则 )
  • ctfshow web入门 php反序列化 web267--web270
  • 智慧公厕解决什么问题?实现了什么样的价值?
  • IATF16949认证是什么?
  • 【Vue2】关于response返回数据的错误小记
  • 深入理解C++构造函数和析构函数
  • CMakeLists.txt语法规则:数学运算 math
  • 图片无损压缩工具-VIKY
  • 【Linux操作系统】:文件操作
  • 渗透之sql注入----二次注入
  • LeetCode 每日一题 ---- 【2105. 给植物浇水 II】
  • 【刷题】代码随想录算法训练营第三十五天|435、无重叠区间,763、划分字母区间 ,56、合并区间
  • 【JVM】了解JVM规范中的虚拟机结构
  • 西藏在线教育系统哪家好,培训机构为什么讲师流动大?该如何留住讲师?
  • 智能文档提取
  • 封装Springboot基础框架功能-03
  • 汽车EDI:IAC Elmdon EDI 对接指南
  • IPFoxy:什么是静态住宅IP?静态ISP代理指南
  • 【算法】高精度(string实现)
  • 宝塔面板如何删除一个站点
  • Android RecyclerView
  • 【QT教程】QT6命令行工具开发 QT命令行
  • 基于Springboot的微乐校园管理系统(有报告)。Javaee项目,springboot项目。
  • 【第6节课笔记】LagentAgentLego
  • 【ARMv8/v9 系统寄存器 4 -- ARMv8 通用寄存器详细介绍】
  • 一个月速刷leetcodeHOT100 day 01
  • Cargo - 构建 rust项目、管理依赖包
  • 内网安全-代理Socks协议路由不出网后渗透通讯CS-MSF控制上线简单总结
  • NSSCTF | [SWPUCTF 2021 新生赛]jicao