23种设计模式之迭代器模式(Iterator Pattern)

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将23种设计模式中的迭代器模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。
如果文章有什么需要改进的地方还请大佬不吝赐教
小威在此先感谢各位大佬啦~~
在这里插入图片描述

个人主页:小威要向诸佬学习呀
个人简介:大家好,我是小威,一个想要与大家共同进步的男人
目前状况:24届毕业生,在一家满意的公司实习

欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬

以下正文开始
23种设计模式之迭代器模式(Iterator Pattern)_第1张图片

文章目录

  • 迭代器模式概念
  • 迭代器模式构成部分
  • 迭代器模式案例
  • 迭代器模式小结

迭代器模式概念

迭代器模式是一种对象行为型设计模式。它提供了遍历集合对象所需的标准接口,而不暴露集合对象的实现方式

在Java编程中,常见的集合类包括List、Set和Map等,这些都内部维护着一个元素列表。通过迭代器模式,对于任何一种集合对象,在不了解其内部实现的情况下,都可以轻松地遍历其中的每个元素,从而简化了代码的编写和维护。

迭代器模式构成部分

迭代器模式由两个主要组成部分构成:迭代器(Iterator)和可迭代对象(Iterable)。迭代器用于定义访问和遍历元素的接口,而可迭代对象用于返回迭代器。

下面是迭代器模式的基本结构:

迭代器(Iterator):定义访问和遍历聚合对象元素的接口;
具体迭代器(ConcreteIterator):实现迭代器接口,并对聚合对象进行遍历和存储当前遍历位置等操作;
可迭代对象(Iterable):定义获取迭代器的接口;
具体可迭代对象(ConcreteIterable):实现可迭代对象接口,返回具体的迭代器实例。
迭代器模式的使用步骤如下:

定义聚合对象的对象结构,包含 add()、remove()和 get()等方法;
定义迭代器接口 Iterator,并声明 getFirst()、getNext()、isDone() 和 getCurrentItem() 方法;
实现具体迭代器 ConcreteIterator 类,维护一个指向当前位置的指针,实现 Iterator 接口中的方法实现元素遍历;
实现可迭代对象 Iterable 接口,并实现创建迭代器实例的方法 iterator();
在客户端代码中使用该聚合对象和迭代器通过 hasNext()、next() 等方法对集合对象进行访问和遍历。
总之,迭代器模式是一种非常有用且广泛应用于实际开发的设计模式,它可以有效地解耦集合对象和其遍历方式,使得代码更加简洁和易于维护。

迭代器模式案例

假设我们有一个存储了学生信息的集合类 StudentList,包含了 addStudent()、removeStudent()和 getStudent()等方法。现在,我们需要基于迭代器模式来遍历这个学生信息集合。具体步骤如下:

定义迭代器接口 Iterator:

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

实现具体的迭代器类 ConcreteIterator:

public class ConcreteIterator implements Iterator {
    private StudentList studentList;
    private int index = 0;

    public ConcreteIterator(StudentList list) {
        this.studentList = list;
    }

    @Override
    public boolean hasNext() {
        return index < studentList.getLength();
    }

    @Override
    public Object next() {
        if (hasNext()) {
            return studentList.getStudent(index++);
        }
        return null;
    }
}

定义可迭代对象接口 Iterable:

public interface Iterable {
    public Iterator iterator();
}

实现具体的可迭代对象类 ConcreteIterable:

public class ConcreteIterable implements Iterable {
    private StudentList studentList;

    public ConcreteIterable(StudentList list) {
        this.studentList = list;
    }

    @Override
    public Iterator iterator() {
        return new ConcreteIterator(studentList);
    }
}

在客户端代码中使用聚合对象和迭代器进行遍历:

public static void main(String[] args) {
    StudentList list = new StudentList();
    list.addStudent("Tom");
    list.addStudent("Mary");
    list.addStudent("John");

    ConcreteIterable iterable = new ConcreteIterable(list);
    Iterator iterator = iterable.iterator();
    while (iterator.hasNext()) {
        String name = (String) iterator.next();
        System.out.println(name);
    }
}

上面的代码中,我们首先定义了迭代器接口 Iterator,并在迭代器具体实现类 ConcreteIterator 中实现了遍历集合对象的逻辑。然后,我们定义了可迭代对象接口 Iterable,并在其实现类 ConcreteIterable 中返回具体的迭代器实例。最后,在客户端代码中使用该聚合对象和迭代器通过 hasNext()、next() 等方法对集合对象进行访问和遍历。

迭代器模式小结

总的来说,迭代器模式将聚合对象和遍历方式分离,提供了一种通用的遍历机制,使得不同类型的集合对象均可以方便地进行遍历,并且通过迭代器接口也可以更加灵活地定义迭代器的行为

好了,本篇文章就先分享到这里了,后续将会继续介绍23种设计模式之其他模式,感谢大佬认真读完支持咯~
在这里插入图片描述

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论
希望能和诸佬们一起努力,今后我们顶峰相见
再次感谢各位小伙伴儿们的支持

在这里插入图片描述

你可能感兴趣的:(一天一种设计模式,设计模式,迭代器模式,java)