设计模式-迭代器模式

迭代器模式

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

角色:

抽象迭代器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
    
    欢迎大家留言,以便于后面的人更快解决问题!另外亦欢迎大家可以关注我的微信公众号,方便利用零碎时间互相交流。共勉!

    posted @   灵台悠步  阅读(8)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
    · 25岁的心里话
    · 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
    · ollama系列01:轻松3步本地部署deepseek,普通电脑可用
    · 按钮权限的设计及实现
    点击右上角即可分享
    微信分享提示