🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支持一下,感谢🤗!
🌟了解中介者模式请看: (十 九)趣学设计模式 之 中介者模式!
✨更多请看个人主页: 码熔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 文档 📜!
- 图形界面: 遍历控件列表 🖼️!
六、 总结
- 迭代器模式就像给集合对象配一个“遥控器”,让你能一个一个地访问里面的元素,而不用关心集合内部是怎么实现的! 🎮
- 核心概念包括迭代器和聚合! 🔑
- 优点是简化集合的访问、支持多种遍历方式、解耦集合和遍历算法、提高代码的可维护性和可复用性! 👍
- 缺点是增加了类的数量,增加了代码的复杂度、对于简单的集合遍历,可能显得过于繁琐! 👎
- 适用于需要遍历一个集合对象,并且不想暴露集合对象的内部结构的场景! 🎯
希望这篇文章能让你彻底理解迭代器模式! 💯 祝你学习愉快! 😄