欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > (二 十)趣学设计模式 之 迭代器模式!

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

2025/3/9 4:20:48 来源:https://blog.csdn.net/qq_56158663/article/details/146018432  浏览:    关键词:(二 十)趣学设计模式 之 迭代器模式!

在这里插入图片描述

目录

    • 一、 啥是迭代器模式?
    • 二、 为什么要用迭代器模式?
    • 三、 迭代器模式的实现方式
    • 四、 迭代器模式的优缺点
    • 五、 迭代器模式的应用场景
    • 六、 总结

🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支持一下,感谢🤗!
🌟了解中介者模式请看: (十 九)趣学设计模式 之 中介者模式!
✨更多请看个人主页: 码熔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;}@Overridepublic boolean hasNext() {return position < array.length;}@Overridepublic 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;}@Overridepublic 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 文档 📜!
  • 图形界面: 遍历控件列表 🖼️!

六、 总结

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

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词