惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
Google Developers Blog
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
Recent Announcements
Recent Announcements
阮一峰的网络日志
阮一峰的网络日志
IT之家
IT之家
A
About on SuperTechFans
量子位
Engineering at Meta
Engineering at Meta
B
Blog
The Cloudflare Blog
博客园 - 【当耐特】
Hugging Face - Blog
Hugging Face - Blog
Y
Y Combinator Blog
J
Java Code Geeks
D
DataBreaches.Net
aimingoo的专栏
aimingoo的专栏
T
Tailwind CSS Blog
H
Help Net Security
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
V2EX
Stack Overflow Blog
Stack Overflow Blog
C
Check Point Blog
酷 壳 – CoolShell
酷 壳 – CoolShell

牛牛技术客栈

设计模式-备忘录模式 - OXOXTECH 牛牛技术客栈 设计模式-中介者模式 - OXOXTECH 牛牛技术客栈 Linux【Ubuntu】修改ssh默认端口 - OXOXTECH 牛牛技术客栈 scheduled定时任务的三种基本实现方式 - OXOXTECH 牛牛技术客栈 Apriori - 基于关联规则的推荐算法(三) - OXOXTECH 牛牛技术客栈 Apriori - 基于关联规则的推荐算法(二) - OXOXTECH 牛牛技术客栈 Apriori - 基于关联规则的推荐算法(一) - OXOXTECH 牛牛技术客栈 基于JavaFX的桌面端网络调试工具 - OXOXTECH 牛牛技术客栈 Golang Channel的原理介绍 - OXOXTECH 牛牛技术客栈 Go语言Map的原理分析 - OXOXTECH 牛牛技术客栈 Go语言错误处理(panic)的最佳实践 - OXOXTECH 牛牛技术客栈 设计模式-解释器模式 - OXOXTECH 牛牛技术客栈 Redis报错Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. go-webpbin库在Linux报错failed to encode image to WebP: exit status 1.......的问题 exe4j 打包加密的jar - OXOXTECH 牛牛技术客栈 Go生成图形验证码示例 - OXOXTECH 牛牛技术客栈 澳门一天游:一日尽享东方与西方的交融之美 - OXOXTECH 牛牛技术客栈 设计模式-命令模式 - OXOXTECH 牛牛技术客栈 别再自己瞎写工具类了,SpringBoot内置工具类应有尽有 - OXOXTECH 牛牛技术客栈 中山一日游 - OXOXTECH 牛牛技术客栈 设计模式-责任链模式 - OXOXTECH 牛牛技术客栈 起舞吧,齐舞吧 - OXOXTECH 牛牛技术客栈 设计模式-组合模式 - OXOXTECH 牛牛技术客栈 Go语言Web开发|GoFrame框架入门笔记 - OXOXTECH 牛牛技术客栈 Java打包exe教程 - OXOXTECH 牛牛技术客栈 设计模式-代理模式 - OXOXTECH 牛牛技术客栈 MySQL存储过程的优缺点有哪些? - OXOXTECH 牛牛技术客栈 前端渲染优化有哪些? - OXOXTECH 牛牛技术客栈 HTTP状态码及其含义 - OXOXTECH 牛牛技术客栈 从浏览器地址栏输入url到显示页面的步骤 - OXOXTECH 牛牛技术客栈
设计模式-迭代器模式 - OXOXTECH 牛牛技术客栈
Jensen · 2026-01-19 · via 牛牛技术客栈

设计模式-迭代器模式

Jensen Java Java, 设计模式

前言

由于近期忙工作[辣眼睛],回过头来才发现这一系列从上一次撰写解释器模式后就开始断更了大半年了,今天重新拾起给这个系列补充完整。
Java开发中,设计模式是常用的一种编码方式,合理使用设计模式可以帮助开发人员更快地编写出高效、可靠和可维护的代码。本期将撰写一个关于设计模式的系列文章,总共23种设计模式将以一篇一篇文章讲解,代码笔记已开源至:Gitee点击跳转。在上一篇《Java设计模式(14)解释器模式》文章中,我们介绍了解释器模式。本文是这个系列的第十五篇章,我们将讲解一下迭代器模式的实现方式、应用场景以及它的用途。

迭代器模式

迭代器模式(Iterator Pattern)是一种行为设计模式,它允许顺序访问一个聚合对象的元素,而不需要暴露其内部逻辑表现。迭代器模式主要用于遍历集合对象中的元素用的。

使用场景

  1. 遍历集合对象:需要遍历一个集合对象中的所有元素时,迭代器模式提供了一种统一的方式。
  2. 隐藏内部实现:不需要了解集合对象的内部结构就能遍历其元素,符合封装的思想。
  3. 不同集合的统一接口:为不同的集合提供一个统一的接口进行遍历操作,使得代码更加灵活。

代码实现

以下是一个使用迭代器模式的示例代码。我们将创建一个简单的集合类 BookCollection 和对应的迭代器 BookIterator,用来遍历书籍集合。

/**
 * 书籍集合类
 * @author Jensen
 * @date 2024-07-05
 * */
public class BookCollection implements Iterable<Book> {
    private final List<Book> books = new ArrayList<>();

    public void addBook(Book book) {
        books.add(book);
    }
    @Override
    public Iterator<Book> iterator() {
        return new BookIterator(books);
    }
}

public class BookIterator implements Iterator<Book> {
    private final List<Book> books;
    private Integer position = 0;
    public BookIterator(List<Book> books) {
        this.books = books;
    }
    @Override
    public boolean hasNext() {
        return position < books.size();
    }
    @Override
    public Book next() {
        return books.get(position++);
    }
}

public class Book {
    private final String name;

    public Book(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
}

测试使用

在客户端创建一个 BookCollection 实例并添加几本书。 获取书籍集合的迭代器并遍历所有书籍,输出书名。

System.out.println("------------------------------迭代器模式-----------------------------");
BookCollection books = new BookCollection();
books.addBook(new Book("史记"));
books.addBook(new Book("红楼梦"));
books.addBook(new Book("西游记"));
books.addBook(new Book("三国志"));
books.addBook(new Book("道德经"));
Iterator<Book> iterator = books.iterator();
while (iterator.hasNext()){
     Book book = iterator.next();
     System.out.println(book.getName());
}

输出结果

image.png

结语

迭代器模式通过将集合的遍历逻辑封装在迭代器中,使得集合的遍历变得更加简洁和统一,避免了暴露集合的内部实现细节。这个模式广泛应用于各种集合类库中,如 Java 的 java.util 包中的各种集合类。

号外

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1h304b0nim8l0