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

设计模式-迭代器模式

时间:2024-06-19 20:35:20浏览次数:14  
标签:iterator 迭代 course 模式 Course aggregate 设计模式 public

迭代器模式

迭代器模式,又称为游标模式,它提供一种顺序访问集合/容器 对象元素的方法,而又无需暴漏集合内部表示。迭代器模式可以为不同的容器提供一致的遍历行为,而不用关心容器内容元素组成结构,属于行为型模式。

角色:

抽象迭代器Iterator:负责定义访问和遍历元素的接口
具体迭代器ConcreteIterator:提供具体的元素遍历行为
抽象容器Aggregate:负责定义提供具体迭代器的接口
具体容器ConcreteAggregate:创建具体迭代器

源码的集合是经典的迭代器示例,实际开发中较少使用。

举例
  • 类图
    迭代器.png
  • 代码
    容器内元素
package com.caozz.demo2.iterator.course;

public class Course {
    private String name;

    public Course(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

迭代器抽象

package com.caozz.demo2.iterator.course;

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

迭代器实现:

package com.caozz.demo2.iterator.course;

import java.util.List;

public class IteratorImpl<E> implements Iterator<E> {
    private List<E> list;
    private int cursor;
    private E element;

    public IteratorImpl(List<E> list) {
        this.list = list;
    }

    public E next() {
        System.out.print("当前位置 " + cursor + " : ");
        element = list.get(cursor);
        cursor ++;
        return element;
    }

    public boolean hasNext() {
        if(cursor > list.size() - 1){
            return false;
        }
        return true;
    }
}

容器抽象

package com.caozz.demo2.iterator.course;

public interface ICourseAggregate {
    void add(Course course);
    void remove(Course course);
    Iterator<Course> iterator();
}

容器实现

package com.caozz.demo2.iterator.course;

import java.util.ArrayList;
import java.util.List;

public class CourseAggregateImpl implements ICourseAggregate {
    private List courseList;

    public CourseAggregateImpl() {
        this.courseList = new ArrayList();
    }

    public void add(Course course) {
        courseList.add(course);
    }

    public void remove(Course course) {
        courseList.remove(course);
    }

    public Iterator<Course> iterator() {
        return new IteratorImpl<Course>(courseList);
    }
}

测试

package com.caozz.demo2.iterator.course;

public class Test {
    public static void main(String[] args) {
        Course java = new Course("Java架构");
        Course javaBase = new Course("Java基础");
        Course design = new Course("设计模式");
        Course ai = new Course("人工智能");

        ICourseAggregate aggregate = new CourseAggregateImpl();
        aggregate.add(java);
        aggregate.add(javaBase);
        aggregate.add(design);
        aggregate.add(ai);

        System.out.println("===========课程列表==========");
        printCourse(aggregate);

        aggregate.remove(ai);

        System.out.println("===========删除操作之后的课程列表==========");
        printCourse(aggregate);
    }

    private static void printCourse(ICourseAggregate aggregate) {
        Iterator<Course> i = aggregate.iterator();
        while (i.hasNext()){
            Course course = i.next();
            System.out.println("《" + course.getName()  + "》");
        }
    }
}

测试结果

D:\software\java\jdk-17.0.2\bin\java.exe "-javaagent:D:\software\JetBrains\IntelliJ IDEA 
===========课程列表==========
当前位置 0 : 《Java架构》
当前位置 1 : 《Java基础》
当前位置 2 : 《设计模式》
当前位置 3 : 《人工智能》
===========删除操作之后的课程列表==========
当前位置 0 : 《Java架构》
当前位置 1 : 《Java基础》
当前位置 2 : 《设计模式》

Process finished with exit code 0
欢迎大家留言,以便于后面的人更快解决问题!另外亦欢迎大家可以关注我的微信公众号,方便利用零碎时间互相交流。共勉!

标签:iterator,迭代,course,模式,Course,aggregate,设计模式,public
From: https://www.cnblogs.com/caozz/p/18257314/iterator

相关文章

  • 整理好了!2024年最常见 20 道设计模式面试题(五)
    上一篇地址:整理好了!2024年最常见20道设计模式面试题(四)-CSDN博客九、什么是命令模式?它如何帮助实现解耦?命令模式(CommandPattern)是一种行为设计模式,它将一个请求或操作封装为一个对象。这种模式的主要目的是将发起请求的对象与执行请求的对象解耦,从而让不同的请求、队列或者......
  • Python 迭代器与生成器
    迭代器迭代器(Iterator)是一个可以记住遍历的位置的对象,该对象包含值的可计数数字,在Python当中:迭代器是实现迭代器协议的对象,它包含方法__iter__()和__next__()__iter__()方法作用:返回迭代器对象本身__next__()方法作用:返回迭代器的下一个元素,如果没有元素了则就会触发Sto......
  • 链动2+1营销策略 分销裂变商业模式 干货解析
    链动2+1是一个集团队搭设、快速提升产品销量,与消费者做到合作共赢的一个商业模式让用户在享受购物折扣的同时,也能获得相对收益,同时公司也能达到产品快速销售这样的一个目的,而链动2+1也是目前速度最快最有效的裂变模式,留客率非常高。模式框架内只有两个身份:代理、老板1.成......
  • 《产流模式的发现与发展》-芮孝芳-2013年1月发表于期刊<水利水电科技进展>
    摘要:回顾了产流理论的起源,指出Horton产流理论、Kohler与Linsley的5变量合轴相关图形式的降雨径流相关图,以及Dunne通过实验对Horton产流理论的拓展,奠定了产流理论和流域产流量计算方法的基础。总结了中国自20世纪50年代以来在这一领域的主要实践和理论探索,指......
  • 多线程设计模式之Worker Thread模式
    以前用C/C++写进程池,要么一下子fork最大进程数,要么来一个任务fork一个进程。多线程也可以这样设计,并总结这种模式为WorkerThread模式。类图如下:具体实现参考如下代码(一次性开启足够多的线程):1)Request......
  • 行为型模式-状态模式
    状态模式模式是什么   状态模式是一种行为型设计模式,它允许对象在内部状态发生改变时改变它的行为。在状态模式中,对象的行为是基于当前状态来决定的,对象会根据不同的状态来执行不同的操作。这样可以将复杂的状态逻辑封装在具体的状态类中,使得代码更加可维护、可扩展,并且符......
  • EtherCAT主站SOEM -- 44 -- win-vs-soem-win10及win11系统VisualStudio-SOEM-控制电机
    EtherCAT主站SOEM--44--win-vs-soem-win10及win11系统VisualStudio-SOEM-控制电机走周期同步位置模式(CSP模式)0QT-SOEM及STM32F767-SOEM视频欣赏及源代码链接:0.1Linux--Ubuntu系统之QT-SOEM博客、视频欣赏及源代码链接0.2STM32F767-SOEM博客、视频欣赏及源......
  • python文件操作、文件操作、读写文件、写模式
    with读取文件数据内容withopen(filepath,mode,encoding)asfile:#具体操作,例如:print(file.read())#查看文件所有的内容。with:Python中的一个上下文管理器,用于简化资源的管理和释放。它可以用于任意需要进行资源分配和释放的情境,比如文件操作、数据库连......
  • 设计模式——单例模式
    单例模式(Singleton)单例模式是一种创建型设计模式,保证一个类只有一个实例,并提供一个访问它的全局访问点单例模式解决了两个问题:保证一个类只有一个实例。控制类的实例数量的常见原因是控制某些共享资源(例如数据库或文件)的访问权限。为该实例提供一个全局访问节点。......
  • C# 模式匹配
    C#模式匹配https://www.geeksforgeeks.org/pattern-matching-in-c-sharp/https://www.codeproject.com/Articles/5368148/Your-Quick-Guide-to-Pattern-Matching-in-Csharp什是模式匹配模式匹配是一种在代码中识别和提取数据的机制。它允许您以声明式的方式检查对象的形状......