千家信息网

python中的迭代器模式的作用是什么

发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,本篇内容主要讲解"python中的迭代器模式的作用是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"python中的迭代器模式的作用是什么"吧!(一)什
千家信息网最后更新 2025年01月22日python中的迭代器模式的作用是什么

本篇内容主要讲解"python中的迭代器模式的作用是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"python中的迭代器模式的作用是什么"吧!

(一)什么是迭代器模式

迭代器模式应该是23种设计模式中,程序员最容易理解的设计模式了,因为迭代器模式在日常的开发过程中经常使用到。以最常见的循环为例:

for(int i=0;i

上面的这段代码通过循环逐一将arr的下标加1,从而实现了遍历数组的功能。

但是通过循环实现遍历的话依赖于集合对象内部,因此就有了一种能顺序访问集合对象中各个元素,又无需依赖对象内部表示的设计模式--迭代器模式。

(二)迭代器模式中的角色

迭代器模式中的角色主要有4种:

1、迭代器接口(Iterator):定义访问和遍历集合元素的接口,一般包含next()和hasNext()方法。

2、具体迭代器(ConcreteIterator):该角色用于实现迭代器接口,迭代器的核心遍历逻辑在这里实现。

3、集合接口(Aggregate):集合接口定义了创建迭代器的接口方法,内部定义了iterator方法。

4、具体集合(ConcreteAggregate):该角色用于实现集合接口,他会创建出具体的Iterator角色。

看到这里如果你觉得比较疑惑不要紧,下面会通过代码的方式来加深理解。

(三)迭代器模式的代码实现

首先说一下这段代码的场景,定义了一个教室的类,又定义了学生的类,实现遍历教室中学生的功能。

代码列表如下:

interface Aggregate:集合接口interface Iterator:迭代器接口class Classroom:教室类,实现集合接口,属于具体的集合class ClassroomIterator:教室迭代器,实现迭代器接口,属于具体的迭代器class Student:学生类

首先把迭代器模式中的两个接口角色定义出来:

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

接着定义学生类:

@Data@AllArgsConstructorpublic class Student {    private String name;}

接着定义教室类,在教室类中我们定义了Student集合,以及当前的集合长度和最大长度。同时实现Aggregate接口的iterator方法,这个方法将会返回一个迭代器对象。这个迭代器对象由ClassroomIterator提供

public class Classroom implements Aggregate{    private Student[] students;    private int length=0;    private int maxSize;     public Classroom(int maxSize){        this.maxSize=maxSize;        students=new Student[maxSize];    }     public Student getStudent(int index){        return students[index];    }     public boolean addStudent(Student student){        if (length>=maxSize){            return false;        }        this.students[length]=student;        length++;        return true;    }     public int getLength(){        return this.length;    }     @Override    public Iterator iterator() {        return new ClassroomIterator(this);    }}

最后就是ClassroomIterator对象了,ClassroomIterator属于迭代器的具体实现,这里需要实现hasNext方法和next方法

public class ClassroomIterator implements Iterator{    private Classroom classroom;    private int index;     public ClassroomIterator(Classroom classroom){        this.classroom=classroom;        this.index=0;    }    @Override    public boolean hasNext() {        if (this.index

最后就是使用了,通过迭代器对象,我们可以直接遍历classroom对象:

public static void main(String[] args) {    Classroom classroom=new Classroom(3);    classroom.addStudent(new Student("张三"));    classroom.addStudent(new Student("李四"));    classroom.addStudent(new Student("王五"));    Iterator iterator = classroom.iterator();    while (iterator.hasNext()){        Student next = (Student) iterator.next();        System.out.println(next.getName());    }}

(四)迭代器模式的作用

看到这里很多人可能会有疑问,写了一堆,用循环不是更方便吗?迭代器模式最大的作用是将遍历和具体的实现分开,以上面的测试方法为例,遍历时我们始终只用到了iterator对象,而没有用到classroom,这就意味着我们之后可以完全复用这段代码实现遍历。

另一方面,如果我们发现在classroom里使用数组存储student,后续无法扩容,想改为List集合,这个时候我们只需要修改ClassroomIterator和Classroom这两个具体实现角色即可。而不用对使用中的代码做任何修改,就比如上面这段测试遍历代码不需要任何变动。如果用的是for循环或者while循环,就意味着所有用到循环的地方都需要修改代码。

(五)迭代器模式在源码中的应用

迭代器模式的应用我们在敲代码时肯定都用过,迭代器模式最佳实践就是JDK中Iterator接口的设计

public interface Iterator {    boolean hasNext();    E next();    default void remove() {        throw new UnsupportedOperationException("remove");    }    default void forEachRemaining(Consumer action) {        Objects.requireNonNull(action);        while (hasNext())            action.accept(next());    }}

到此,相信大家对"python中的迭代器模式的作用是什么"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

迭代 模式 接口 代码 对象 方法 角色 循环 教室 作用 设计 学生 就是 设计模式 最大 两个 元素 内容 功能 意味 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 口碑好的网络技术咨询是真的吗 广州什么学校学软件开发 pg数据库中生成唯一值函数 网络安全季宣传活动方案 网络安全和软件开发区别 智能软件开发线性布局图片 服务器搭建图床 ubuntu 慈溪农商软件开发薪酬 数据库数据如何在前台输出 中文期刊数据库有哪些维普 USB端口管理服务器 数据库课程设计 通讯录 英语四级匹配题网络安全 广州格调互联网科技公司 网络安全世界大赛排名 预防网络安全的主题班会内容 怎么设置表格数据库备份 怎么写软件开发公司优势 浙江智能化软件开发代理价格 数据库技术期末知识点总结 怎么保存图片的数据库中 服务器uefi 识别不了u盘 小程序与服务器沟通 方舟进化服务器管理员菜单 小程序软件开发商排名 贵州省微观经济数据库 网络安全的重要性的标语 注册用户信息一般在数据库哪里 对当今软件开发开发 dna数据库建立了吗
0