(二 十)趣学设计模式 之 迭代器模式!

发布于:2025-03-05 ⋅ 阅读:(27) ⋅ 点赞:(0)

在这里插入图片描述


🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支持一下,感谢🤗!
🌟了解中介者模式请看: (十 九)趣学设计模式 之 中介者模式!
✨更多请看个人主页: 码熔burning

这篇文章带你详细认识一下设计模式中的迭代器模式

一、 啥是迭代器模式?

想象一下,你正在浏览一本厚厚的书 📖。 你不需要一次性看完所有内容,而是可以一页一页地翻阅。 迭代器模式就像是这本书的目录和翻页功能,它提供了一种顺序访问集合对象中每个元素的方法,而不需要暴露该对象的内部表示。

迭代器模式,就是提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示 🎁。

简单来说,就是给集合对象配一个“遥控器”,让你能一个一个地访问里面的元素,而不用关心集合内部是怎么实现的!

  • 你需要遍历一个集合对象: 就像你需要浏览一本书的所有页面 📖!
  • 你不想暴露集合对象的内部结构: 就像你不需要知道书的装订方式,只需要知道怎么翻页 🤝!
  • 你需要支持多种遍历方式: 就像你需要支持从前往后翻页,或者从后往前翻页 🔄!

二、 为什么要用迭代器模式?

用迭代器模式,好处多多 👍:

  • 简化集合的访问: 客户端只需要使用迭代器提供的接口来访问集合元素,无需关心集合的内部实现 💫!
  • 支持多种遍历方式: 可以为同一个集合对象提供多种迭代器,支持不同的遍历方式 ➕!
  • 解耦集合和遍历算法: 集合对象只负责存储数据,迭代器负责遍历数据,两者互不影响 🤝!
  • 提高代码的可维护性和可复用性: 将遍历逻辑封装到迭代器中,使得代码更加清晰易懂 💡!

三、 迭代器模式的实现方式

迭代器模式主要包含两个核心概念:

  • 迭代器(Iterator): 定义了访问和遍历元素的接口,通常包含 hasNext()next() 方法 🏠!
  • 聚合(Aggregate): 也称为集合,定义了创建迭代器的接口,通常包含 createIterator() 方法 ⚙️!
// 迭代器接口

public interface Iterator<T> {
    boolean hasNext(); // 是否有下一个元素
    T next(); // 获取下一个元素
}

// 具体迭代器:数组迭代器

public class ArrayIterator<T> implements Iterator<T> {

    private T[] array;
    private int position = 0;

    public ArrayIterator(T[] array) {
        this.array = array;
    }

    @Override
    public boolean hasNext() {
        return position < array.length;
    }

    @Override
    public T next() {
        if (hasNext()) {
            return array[position++];
        }
        return null;
    }
}

// 聚合接口

public interface Aggregate<T> {
    Iterator<T> createIterator(); // 创建迭代器
}

// 具体聚合:数组集合

public class ArrayAggregate<T> implements Aggregate<T> {

    private T[] array;

    public ArrayAggregate(T[] array) {
        this.array = array;
    }

    @Override
    public Iterator<T> createIterator() {
        return new ArrayIterator<>(array);
    }
}

// 客户端

public class Client {
    public static void main(String[] args) {
        // 创建数组
        String[] names = {"张三", "李四", "王五"};

        // 创建数组集合
        ArrayAggregate<String> aggregate = new ArrayAggregate<>(names);

        // 创建迭代器
        Iterator<String> iterator = aggregate.createIterator();

        // 遍历集合
        while (iterator.hasNext()) {
            String name = iterator.next();
            System.out.println(name);
        }
    }
}

代码解释

  • Iterator 接口是迭代器接口,定义了 hasNextnext 方法,用于判断是否还有下一个元素和获取下一个元素。
  • ArrayIterator 类是具体迭代器,实现了 Iterator 接口,负责遍历数组集合。
  • Aggregate 接口是聚合接口,定义了 createIterator 方法,用于创建迭代器。
  • ArrayAggregate 类是具体聚合,实现了 Aggregate 接口,负责存储数组数据并创建迭代器。

输出结果

张三
李四
王五

四、 迭代器模式的优缺点

优点:

  • 简化集合的访问 💫!
  • 支持多种遍历方式 ➕!
  • 解耦集合和遍历算法 🤝!
  • 提高代码的可维护性和可复用性 💡!

缺点:

  • 增加了类的数量,增加了代码的复杂度 😫!
  • 对于简单的集合遍历,可能显得过于繁琐 🤯!

五、 迭代器模式的应用场景

  • 访问集合对象: 数组、列表、树等等 🌳!
  • 数据库查询: 遍历查询结果集 🗄️!
  • XML 解析: 遍历 XML 文档 📜!
  • 图形界面: 遍历控件列表 🖼️!

六、 总结

  • 迭代器模式就像给集合对象配一个“遥控器”,让你能一个一个地访问里面的元素,而不用关心集合内部是怎么实现的! 🎮
  • 核心概念包括迭代器和聚合! 🔑
  • 优点是简化集合的访问、支持多种遍历方式、解耦集合和遍历算法、提高代码的可维护性和可复用性! 👍
  • 缺点是增加了类的数量,增加了代码的复杂度、对于简单的集合遍历,可能显得过于繁琐! 👎
  • 适用于需要遍历一个集合对象,并且不想暴露集合对象的内部结构的场景! 🎯

希望这篇文章能让你彻底理解迭代器模式! 💯 祝你学习愉快! 😄