设计模式:Iterator模式
AI速览:迭代器模式通过提供统一接口(如
hasNext()和next())遍历集合元素,隐藏集合内部结构(如数组或链表),实现遍历与集合的解耦,常用于简化不同数据结构的访问逻辑(如Java集合框架),支持多种遍历方式,但可能增加简单场景的复杂度。核心思想是“无需关心集合细节,只管按需取用”。
设计模式:Iterator模式(迭代器模式)
什么是迭代器模式?
想象一下,你去图书馆借书,书架上摆满了不同类型的书籍。你不需要知道书架内部如何排列书籍,只需要问管理员“下一本是什么书?”就能依次拿到所有书。迭代器模式就是这个“管理员”——它帮你遍历集合对象中的元素,同时隐藏集合的内部结构(比如数组、链表),让遍历操作和集合本身解耦。
为什么需要它?
- 统一遍历方式:无论集合是数组、链表还是树,调用
next()就能拿到下一个元素。 - 保护封装性:不需要暴露集合内部如何存储数据。
- 支持多种遍历:比如正序遍历、逆序遍历,甚至按条件过滤遍历。
Java代码示例
假设我们有一个自定义的「书架」集合,存放多个「书」对象,用迭代器模式实现遍历:
1. 定义书对象(简单POJO)
1 | public class Book { |
2. 定义迭代器接口
1 | public interface Iterator<T> { |
3. 实现具体的书架迭代器
1 | public class BookShelfIterator implements Iterator<Book> { |
4. 定义集合接口(可迭代的)
1 | public interface IterableCollection { |
5. 实现具体的书架集合
1 | public class BookShelf implements IterableCollection { |
6. 客户端使用
1 | public class Main { |
迭代器模式的核心
Iterator接口:定义遍历的通用方法(如hasNext()和next())。IterableCollection接口:声明集合能生成迭代器。- 解耦:客户端只依赖迭代器接口,不关心集合内部结构。
实际应用
- Java集合框架中的
java.util.Iterator(比如遍历ArrayList或HashSet)。 - 数据库查询结果集的遍历。
- 树形结构(如二叉树)的深度优先或广度优先遍历。
优缺点
✅ 优点
- 符合单一职责原则(集合管理数据,迭代器负责遍历)。
- 支持以不同方式遍历同一个集合。
❌ 缺点
- 对于简单集合(如数组)可能略显繁琐。
- 迭代器需要维护遍历状态(如当前索引),可能增加内存开销。
一句话总结
迭代器模式是“不操心的遍历”——你只管问“还有吗?”,剩下的交给它!
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Erokin's Shelter!
