深入浅出迭代器模式

简介: 深入浅出迭代器模式

1 概念

迭代器模式在设计模式中属于行为型模式,用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。

迭代器模式的结构中包括四种角色:

  • 抽象集合(Abstract Aggregate)
  • 具体集合(Concrete Aggregate)
  • 抽象迭代器(Abstract Iterator)
  • 具体迭代器(Concrete Iterator)

2 案例说明

对Student类实现迭代输出

网络异常,图片无法展示
|


3 代码实现

Aggregate.java

/**
 * @desc: 集合容器抽象
 * @author: YanMingXin
 * @create: 2021/8/31-15:53
 **/
public interface Aggregate {
    public Iterator iterator();
}
复制代码

Iterator.java

/**
 * @desc: 抽象迭代器
 * @author: YanMingXin
 * @create: 2021/8/31-15:53
 **/
public interface Iterator<E> {
    public boolean hasNext();
    public E next();
}
复制代码

Student.java

/**
 * @desc: Student实体类
 * @author: YanMingXin
 * @create: 2021/8/31-15:54
 **/
public class Student  {
    private Integer id;
    private String name;
    private Integer age;
    public Student() {
    }
    public Student(Integer id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
复制代码

StudentIterator.java

/**
 * @desc: 具体迭代器
 * @author: YanMingXin
 * @create: 2021/8/31-15:55
 **/
public class StudentIterator implements Iterator {
    private StudentShelf studentShelf;
    private int index;
    public StudentIterator(StudentShelf studentShelf) {
        this.studentShelf = studentShelf;
        this.index = 0;
    }
    @Override
    public boolean hasNext() {
        if (index < studentShelf.getLength()) {
            return true;
        }
        return false;
    }
    @Override
    public Object next() {
        Student studentAt = studentShelf.getStudentAt(index);
        index += 1;
        return studentAt;
    }
}
复制代码

StudentShelf.java

/**
 * @desc: 集合容器具体实现
 * @author: YanMingXin
 * @create: 2021/8/31-16:11
 **/
public class StudentShelf implements Aggregate {
    private Student[] students;
    private int size = 0;
    private final int DEFAULT_SIZE = 10;
    public StudentShelf() {
        this.students = new Student[DEFAULT_SIZE];
    }
    public StudentShelf(int maxsize) {
        this.students = new Student[maxsize];
    }
    public Student getStudentAt(int index) {
        return students[index];
    }
    public void appendStudent(Student student) {
        this.students[size] = student;
        size++;
        if (size >= DEFAULT_SIZE) {
            //扩容
            Student[] stus = new Student[size * 2];
            System.arraycopy(this.students, 0, stus, 0, this.students.length);
            this.students = stus;
        }
    }
    public int getLength() {
        return size;
    }
    @Override
    public Iterator<Student> iterator() {
        return new StudentIterator(this);
    }
}
复制代码

MyIterator.java

/**
 * @desc: 迭代器模式测试
 * @author: YanMingXin
 * @create: 2021/8/31-15:51
 **/
public class MyIterator {
    public static void main(String[] args) {
        StudentShelf shelf = new StudentShelf();
        shelf.appendStudent(new Student(1,"zs",23));
        shelf.appendStudent(new Student(2,"ls",24));
        shelf.appendStudent(new Student(3,"ww",25));
        Iterator<Student> iterator = shelf.iterator();
        while (iterator.hasNext()){
            Student next = iterator.next();
            System.out.println(next);
        }
    }
}
复制代码

测试结果:

网络异常,图片无法展示
|


4 小总结

迭代器模式相比其他设计模式感觉实现起来麻烦一些,而且还不如for循环好用,那是因为Java内部已经集成了迭代器模式,这样就不用我们开发人员每次使用都进行迭代,而可以直接使用。


相关文章
|
16天前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
8240 19
|
15天前
|
人工智能 并行计算 PyTorch
秋叶 ComfyUI 2026 整合包 v3.2 完整部署教程:Python 3.13 + Torch 2.13 全栈升级
秋叶aaaki ComfyUI 2026年8月整合包v3.2正式发布!全面升级Python 3.13.11、PyTorch 2.13.0+cu130及ComfyUI v0.30.2,原生支持MiniMax H3、Wan 2.2、Qwen-Image-2.1等2026主流音视频/图像模型,解压即用,无需环境配置。
2589 14
|
14天前
|
人工智能 测试技术 API
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
Jev是TypeSafe AI推出的“系统一模型”,不生成文本,专做毫秒级结构化决策:Choice(多选)、Score(打分)、Noul(是非概率)。响应快193倍、成本低444倍,适合工单路由、内容审核、测试定级等高频判断场景。
1878 4
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
|
13天前
|
人工智能 编解码 并行计算
MiniMax-H3 一键整合包技术文档:8G 显存运行 AI 漫剧制作 —— 角色替换 / 动作迁移 / 文图生视频部署与调参指南
MiniMax H3 是 MiniMax 开源的全模态视频生成模型,支持文/图/音/视多条件输入,输出最高2K、15秒带双声道音频视频。本文档详述其Int8量化版在8GB显存下的本地一键部署、三段式工作流(EDIT/REPLACE/CONTINUE)、参数调优及常见问题排查。(239字)
|
9天前
|
人工智能 Linux 开发者
【2026国内使用】Codex安装过程一篇讲透(Win/Mac/Linux全支持)
Codex是OpenAI推出的AI编程智能体,可读取本地项目、理解需求并自动修改代码。支持桌面GUI、命令行(CLI)及VS Code/Cursor插件三种形态,覆盖可视化操作、终端高效开发与编辑器无缝集成场景,助开发者用自然语言驱动编码全流程。(239字)
【2026国内使用】Codex安装过程一篇讲透(Win/Mac/Linux全支持)
|
9天前
|
人工智能 JSON 编解码
【2026最新版】ComfyUI本地部署教程,新手也能看懂!
ComfyUI是本地运行的AI绘画工具,采用节点式工作流设计:通过拖拽连接“加载模型”“提示词编码”“采样”“解码”等模块,实现高度可控的文生图。新手推荐使用秋叶整合包,一键启动、内置模型管理与插件安装器,轻松上手。(239字)
|
23天前
|
缓存 IDE Java
【保姆级】Android Studio下载、安装和汉化教程(2026最新)
Android Studio 是 Google 官方推出的免费 Android 应用开发集成环境,基于 IntelliJ IDEA,内置模拟器、调试器、性能分析及 Compose 界面工具,功能全面,文档丰富,是安卓开发首选工具。(239字)
2480 1

热门文章

最新文章