设计模式-迭代器模式

迭代器模式

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

角色:

抽象迭代器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 @ 2024-06-19 20:22  东方欲晓_莫道君行早  阅读(3)  评论(0编辑  收藏  举报