首页 > 其他分享 >迭代器模式

迭代器模式

时间:2023-12-15 18:01:03浏览次数:20  
标签:遍历 iterator 迭代 students 模式 Student public

迭代器提供了一种统一的方式来访问集合对象中的元素,而不是暴露集合内部的表示方式。简单地说,就是将遍历集合的责任封装到一个单独的对象中,我们可以按照特定的方式访问集合中的元素。

迭代器模式有两个角色,一个是迭代器,一个是聚合器,Java或则c#中的Collection,List,Set,Map就是聚合器。

优点:

简化了集合类的接口,使用者可以更加简单地遍历集合对象,而不需要了解集合内部结构和实现细节。
将集合和遍历操作解耦,使得我们可以更灵活地使用不同的迭代器来遍历同一个集合,根据需求选择不同的遍历方式。
满足开闭原则,如果需要增加新的遍历方式,只需实现一个新的具体迭代器即可,不需要修改原先聚合对象的代码。
缺点:

具体迭代器实现的算法对外不可见,因此不利于调试和维护。
对于某些小型、简单的集合对象来说,使用迭代器模式可能会显得过于复杂,增加了代码的复杂性。

代码示例

/**
* @author Created by njy on 2023/6/25
* 学生实体类
*/
@Data
public class Student {
private String name;
private Integer age;
public Student(String name,Integer age){
this.age=age;
this.name=name;
}
}

import java.util.Iterator;
/**
* @author Created by njy on 2023/6/25
* 抽象迭代器(Iterator):学生迭代器
* 实现Iterator接口
* 负责定义访问和遍历元素的接口,例如提供hasNext()和next()方法。
*/
public interface StudentIterator extends Iterator<Student> {
}

 

/**
* @author Created by njy on 2023/6/25
* 具体迭代器(Concrete iterator):
* 实现抽象迭代器定义的接口,负责实现对元素的访问和遍历。
*/
public class StudentListIterator implements StudentIterator{
private List<Student> students;
private int index;

public StudentListIterator(List<Student> students) {
this.students = students;
this.index = 0;
}

//检查是否还有下一个元素
@Override
public boolean hasNext() {
return (index < students.size());
}

//返回下一个元素
@Override
public Student next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
Student student = students.get(index);
index++;
return student;
}
}

/**
* @author Created by njy on 2023/6/25
* 抽象聚合器(Aggregate):学生聚合器
* 提供创建迭代器的接口,例如可以定义一个iterator()方法。
*/
public interface StudentAggregate {
//用于创建具体的迭代器对象
StudentIterator iterator();
void add(Student student);
}

/**
* @author Created by njy on 2023/6/25
* 具体聚合器(ConcreteAggregate):班级列表
* 实现抽象聚合器定义的接口,负责创建具体的迭代器对象,并返回该对象。
*/
public class ClassList implements StudentAggregate{
private List<Student> students = new ArrayList<>();

//创建迭代器对象
@Override
public StudentIterator iterator() {
return new StudentListIterator(students);
}

//向班级名单中添加学生信息
@Override
public void add(Student student) {
students.add(student);
}
}

/**
* @author Created by njy on 2023/6/25
* 迭代器模式测试类
*/
@SpringBootTest
public class TestIterator {
@Test
void testIterator(){
ClassList classList = new ClassList();
// 添加学生信息
classList.add(new Student("张三", 18));
classList.add(new Student("李四", 19));
classList.add(new Student("王五", 20));
// 获取迭代器,遍历学生信息
StudentIterator iterator = classList.iterator();
while(iterator.hasNext()) {
Student student = iterator.next();
System.out.println("学生姓名:" + student.getName() + ",学生年龄:" + student.getAge());
}
}

}

标签:遍历,iterator,迭代,students,模式,Student,public
From: https://www.cnblogs.com/seeksimple/p/17903921.html

相关文章

  • 命令模式
    命令模式,请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。命令模式有三个角色,一个命令,二是命令接收者,三是命令调用者。像http请求,数据库sql命令都是常见的命令模式。命令模式的意图是将一个请求......
  • 模板方法模式
    模板方法模式是指定义一个操作中算法的骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下即可重定义该算法的某些特定步骤。模板方法主要有两个角色,一个抽象类模板,定义好骨架,第二是实现的子类,实现抽象类模板的抽象方法,和根据需要重写一些方法,其实这也是我......
  • 策略模式
    策略模式有两个主要角色,一个是主类,一个是策略类,通过主类的构造函数将策略类注入到主类,从而实现调用不同的策略。典型的例子就是收银策略,正常收费,八折、五折,满200减50等等。示例代码packagedesignMode.strategy;publicclassCashContext{privateCashSupercashSuper;......
  • 知识|基于混合模式的多余度飞控全数字仿真系统研究
    *余度(Redundancy):一种确保安全的设计手段,使得出现两个及以上故障时,才会引起既定不希望发生的工作状态。飞行控制软件主要完成飞行传感器数据处理、飞行姿态控制和余度管理任务,对保证飞机安全性和可靠性起着关键作用,但是现实中与飞行控制软件相关的研发测试过程依旧举步维艰。其主......
  • python 脚本的启动模式(python -m以模块方式启动)
    今天再看python的项目时,发现GitHub中给出的python脚本的执行格式是python-mpipinstallsomepackage。于是开始了python模式启动之旅。其中很多相关借鉴了该博客,同时感谢博主:http://www.cnblogs.com/xueweihan/p/5118222.html什么是python启动模块:通过python启动一个库中......
  • 适配器模式揭秘:让不兼容的组件完美协同
    前言从这篇文章开始来盘一盘结构型设计模式,在开始之前先来简单回顾一下创建型的设计模式有哪些,如果有兴趣,就来一起学习吧:设计模式之简单工厂模式工厂方法模式:改变你对软件开发的认知_凡夫编程的技术博客_51CTO博客抽象工厂模式:角色解析与应用探索_凡夫编程的技术博客_51CTO博客设计......
  • SaaS模式相比传统CRM系统有哪些优势?为什么成为行业主流
     在数字化时代,选择适合企业的客户关系管理系统(CRM)至关重要。传统CRM系统曾是企业的重要选择,但随着基于互联网的SaaS模式的兴起,越来越多的企业开始转向SaaSCRM。本文将对比传统CRM系统和SaaSCRM,并解答一些常见问题。一、传统CRM系统的局限性传统CRM系统通常需要企业购买和维......
  • 小谈设计模式(21)—迭代器模式
    (小谈设计模式(21)—迭代器模式)专栏介绍主要对目前市面上常见的23种设计模式进行逐一分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。希望各位可以监督我,我们一起学习进步,加油,各位。迭代器模式迭代器模式是一种行为型设计模式,它提供了一种访问聚合对象中各个元素的方法......
  • 写写我认知中的设计模式
    创建型我印象最深刻的就是单例模式,我记得他有一个特别经典的案例:任务管理器;而且我对这个模式的印象也比较深刻:将创建方法私有化,意味着不可以再次创建对象,仅对对象的调用。最近有所感悟的是生成器模式,其实上次软考的学习中我唯一不理解的就是生成器模式,当时听zst2003老师讲,一头雾......
  • 迭代器和三元运算符
    迭代器和三元运算符1.迭代器1.1迭代器介绍迭代器是用来迭代取值的工具,而迭代是重复反馈过程的活动其目的通常是为了逼近所需的目标或结果,每一次对过程的重复称为一次“迭代”而每一次迭代得到的结果会作为下一次迭代的初始值,单纯的重复并不是迭代whileTrue:data=in......