(二 十)趣学筹划模式 之 迭代器模式!

[复制链接]
发表于 2025-10-21 11:42:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

   
  
🌟我的其他文章也讲授的比力风趣😁,如果喜欢博主的讲授方式,可以多多支持一下,感谢🤗!
🌟相识中介者模式请看:  (十 九)趣学筹划模式 之 中介者模式!
✨更多请看个人主页:  码熔burning
  这篇文章带你具体熟悉一下筹划模式中的迭代器模式
一、 啥是迭代器模式?

想象一下,你正在欣赏一本厚厚的书 📖。 你不须要一次性看完全部内容,而是可以一页一页地翻阅。 迭代器模式就像是这本书的目次和翻页功能,它提供了一种次序访问聚集对象中每个元素的方法,而不须要袒露该对象的内部表现。
迭代器模式,就是提供一种方法次序访问一个聚合对象中的各个元素,而又不袒露该对象的内部表现 🎁。
简朴来说,就是给聚集对象配一个“遥控器”,让你能一个一个地访问内里的元素,而不消关心聚集内部是怎么实现的!


  • 你须要遍历一个聚集对象: 就像你须要欣赏一本书的全部页面 📖!
  • 你不想袒露聚集对象的内部结构: 就像你不须要知道书的装订方式,只须要知道怎么翻页 🤝!
  • 你须要支持多种遍历方式: 就像你须要支持从前去后翻页,大概从后往前翻页 🔄!
二、 为什么要用迭代器模式?

用迭代器模式,利益多多 👍:


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

迭代器模式重要包罗两个核心概念:


  • 迭代器(Iterator): 界说了访问和遍历元素的接口,通常包罗 hasNext() 和 next() 方法 🏠!
  • 聚合(Aggregate): 也称为聚集,界说了创建迭代器的接口,通常包罗 createIterator() 方法 ⚙️!
  1. // 迭代器接口
  2. public interface Iterator<T> {
  3.     boolean hasNext(); // 是否有下一个元素
  4.     T next(); // 获取下一个元素
  5. }
  6. // 具体迭代器:数组迭代器
  7. public class ArrayIterator<T> implements Iterator<T> {
  8.     private T[] array;
  9.     private int position = 0;
  10.     public ArrayIterator(T[] array) {
  11.         this.array = array;
  12.     }
  13.     @Override
  14.     public boolean hasNext() {
  15.         return position < array.length;
  16.     }
  17.     @Override
  18.     public T next() {
  19.         if (hasNext()) {
  20.             return array[position++];
  21.         }
  22.         return null;
  23.     }
  24. }
  25. // 聚合接口
  26. public interface Aggregate<T> {
  27.     Iterator<T> createIterator(); // 创建迭代器
  28. }
  29. // 具体聚合:数组集合
  30. public class ArrayAggregate<T> implements Aggregate<T> {
  31.     private T[] array;
  32.     public ArrayAggregate(T[] array) {
  33.         this.array = array;
  34.     }
  35.     @Override
  36.     public Iterator<T> createIterator() {
  37.         return new ArrayIterator<>(array);
  38.     }
  39. }
  40. // 客户端
  41. public class Client {
  42.     public static void main(String[] args) {
  43.         // 创建数组
  44.         String[] names = {"张三", "李四", "王五"};
  45.         // 创建数组集合
  46.         ArrayAggregate<String> aggregate = new ArrayAggregate<>(names);
  47.         // 创建迭代器
  48.         Iterator<String> iterator = aggregate.createIterator();
  49.         // 遍历集合
  50.         while (iterator.hasNext()) {
  51.             String name = iterator.next();
  52.             System.out.println(name);
  53.         }
  54.     }
  55. }
复制代码
代码表明


  • Iterator 接口是迭代器接口,界说了 hasNext 和 next 方法,用于判断是否另有下一个元素和获取下一个元素。
  • ArrayIterator 类是具体迭代器,实现了 Iterator 接口,负责遍历数组聚集。
  • Aggregate 接口是聚合接口,界说了 createIterator 方法,用于创建迭代器。
  • ArrayAggregate 类是具体聚合,实现了 Aggregate 接口,负责存储数组数据并创建迭代器。
输出结果
  1. 张三
  2. 李四
  3. 王五
复制代码
四、 迭代器模式的优缺点

优点:


  • 简化聚集的访问 💫!
  • 支持多种遍历方式 ➕!
  • 解耦聚集和遍历算法 🤝!
  • 进步代码的可维护性和可复用性 💡!
缺点:


  • 增长了类的数目,增长了代码的复杂度 😫!
  • 对于简朴的聚集遍历,大概显得过于繁琐 🤯!
五、 迭代器模式的应用场景



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



  • 迭代器模式就像给聚集对象配一个“遥控器”,让你能一个一个地访问内里的元素,而不消关心聚集内部是怎么实现的! 🎮
  • 核心概念包罗迭代器和聚合! 🔑
  • 优点是简化聚集的访问、支持多种遍历方式、解耦聚集和遍历算法、进步代码的可维护性和可复用性! 👍
  • 缺点是增长了类的数目,增长了代码的复杂度、对于简朴的聚集遍历,大概显得过于繁琐! 👎
  • 实用于须要遍历一个聚集对象,而且不想袒露聚集对象的内部结构的场景! 🎯
盼望这篇文章能让你彻底明白迭代器模式! 💯 祝你学习愉快! 😄
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表