马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
🌟我的其他文章也讲授的比力风趣😁,如果喜欢博主的讲授方式,可以多多支持一下,感谢🤗!
🌟相识中介者模式请看: (十 九)趣学筹划模式 之 中介者模式!
✨更多请看个人主页: 码熔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 接口是迭代器接口,界说了 hasNext 和 next 方法,用于判断是否另有下一个元素和获取下一个元素。
- ArrayIterator 类是具体迭代器,实现了 Iterator 接口,负责遍历数组聚集。
- Aggregate 接口是聚合接口,界说了 createIterator 方法,用于创建迭代器。
- ArrayAggregate 类是具体聚合,实现了 Aggregate 接口,负责存储数组数据并创建迭代器。
输出结果
四、 迭代器模式的优缺点
优点:
- 简化聚集的访问 💫!
- 支持多种遍历方式 ➕!
- 解耦聚集和遍历算法 🤝!
- 进步代码的可维护性和可复用性 💡!
缺点:
- 增长了类的数目,增长了代码的复杂度 😫!
- 对于简朴的聚集遍历,大概显得过于繁琐 🤯!
五、 迭代器模式的应用场景
- 访问聚集对象: 数组、列表、树等等 🌳!
- 数据库查询: 遍历查询结果集 🗄️!
- XML 分析: 遍历 XML 文档 📜!
- 图形界面: 遍历控件列表 🖼️!
六、 总结
- 迭代器模式就像给聚集对象配一个“遥控器”,让你能一个一个地访问内里的元素,而不消关心聚集内部是怎么实现的! 🎮
- 核心概念包罗迭代器和聚合! 🔑
- 优点是简化聚集的访问、支持多种遍历方式、解耦聚集和遍历算法、进步代码的可维护性和可复用性! 👍
- 缺点是增长了类的数目,增长了代码的复杂度、对于简朴的聚集遍历,大概显得过于繁琐! 👎
- 实用于须要遍历一个聚集对象,而且不想袒露聚集对象的内部结构的场景! 🎯
盼望这篇文章能让你彻底明白迭代器模式! 💯 祝你学习愉快! 😄
|