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

Java 设计模式之迭代器模式

文章目录

  • Java 设计模式之迭代器模式
    • 概述
    • UML
    • 代码实现
    • Java的迭代器

Java 设计模式之迭代器模式

概述

  • 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。

UML

在这里插入图片描述

  • Iterator:迭代器接口,定义遍历方法。
  • ConcreteIterator:具体迭代器类,实现迭代器接口,负责遍历聚合对象中的元素。
  • Aggregate:聚合接口,定义创建迭代器方法。
  • ConcreteAggregate:具体聚合类,实现聚合接口,负责存储数据和创建迭代器对象。

代码实现

定义迭代器接口:

public interface Iterator<T> {boolean hasNext();T next();
}

定义具体迭代器类:

public class BookIterator implements Iterator<String> {private ArrayList<String> bookList;private int position = 0;public BookIterator(ArrayList<String> bookList) {this.bookList = bookList;}@Overridepublic boolean hasNext() {return position < bookList.size();}@Overridepublic String next() {if (hasNext()) {return bookList.get(position++);}return null;}
}

定义聚合接口:

public interface Aggregate<T> {Iterator<T> createIterator();
}

定义具体聚合类:

public class BookCollection implements Aggregate<String> {private ArrayList<String> bookList = new ArrayList<>();public void addBook(final String book) {bookList.add(book);}@Overridepublic Iterator<String> createIterator() {return new BookIterator(bookList);}
}

使用:

public class Client {public static void main(String[] args) {BookCollection bookCollection = new BookCollection();bookCollection.addBook("西游记");bookCollection.addBook("水浒传");bookCollection.addBook("红楼梦");bookCollection.addBook("三国演义");Iterator<String> iterator = bookCollection.createIterator();while (iterator.hasNext()) {System.out.println(iterator.next());}}
}

输出:

西游记
水浒传
红楼梦
三国演义

Java的迭代器

Java 提供了迭代器的相关接口:

// java.util.Iterator.javapublic interface Iterator<E> {   boolean hasNext();E next();
}
// java.util.ListIterator.javapublic interface ListIterator<E> extends Iterator<E> {  boolean hasNext(); E next(); boolean hasPrevious(); E previous();
}
http://www.lryc.cn/news/537635.html

相关文章:

  • 登录演示和功能拆解
  • DeepSeek深度求索API多线程批量写原创文章软件-ai痕迹极低
  • Redis进阶使用
  • Python常见面试题的详解6
  • Linux基础之文件权限的八进制表示法
  • 数据结构与算法面试专题——堆排序
  • 《On Java进阶卷》阅读笔记(五)
  • 《代码随想录》刷题笔记——回溯篇【java实现】
  • 数值积分:通过复合梯形法计算
  • AcWing——3624. 三值字符串
  • 【JavaEE进阶】验证码案例
  • Uniapp 短视频去水印解析工具开发实现
  • 计算机网络-八股-学习摘要
  • 编程速递-庆祝Delphi诞生30周年!
  • 每天五分钟深度学习框架pytorch:搭建谷歌的Inception网络模块
  • 性能测试流程、主流性能工具
  • DeepSeek4j 已开源,支持思维链,自定义参数,Spring Boot Starter 轻松集成,快速入门!建议收藏
  • 无耳科技 Solon v3.0.8 发布,Java 企业级应用开发框架
  • 【吾爱出品】针对红警之类老游戏适用WIN10和11的补丁cnc-ddraw7.1汉化版
  • 使用 playwright 自定义 js 下载的路径和文件名
  • Kafka分区管理大师指南:扩容、均衡、迁移与限流全解析
  • 3.从零开始学会Vue--{{生命周期,工程化,组件化}}
  • Python--网络编程
  • 【java】方法的基本内存原理(栈和堆)
  • SQLMesh 系列教程4- 详解模型特点及模型类型
  • SpringBoot(接受参数相关注解)
  • hbase合并队列超长问题分析
  • FPGA的星辰大海
  • 认识vue-admin
  • STM32、GD32驱动TM1640原理图、源码分享