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

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

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

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

以下正文开始
在这里插入图片描述

迭代器模式概念

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

在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种设计模式之其他模式,感谢大佬认真读完支持咯~
在这里插入图片描述

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

在这里插入图片描述

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小威要向诸佬学习呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值