迭代器模式 (Iterator)
📖 通俗理解
电视遥控器换台:
- 你按"下一个"按钮,电视就换到下一个频道
- 你不需要知道电视内部是怎么存储频道的
- 只管按按钮就行
迭代器模式就是:提供一种方法来顺序访问集合中的元素,而不暴露集合的内部结构。
🎯 解决什么问题?
不同的集合(数组、链表、树等)有不同的遍历方式。迭代器模式提供统一的遍历接口。
🌰 生活中的例子
- 遥控器换台
- 播放列表播放歌曲
- 翻书翻页
💻 Java 代码实现
场景:自定义集合迭代器
/**
* 迭代器接口
*/
public interface Iterator<T> {
boolean hasNext();
T next();
}
/**
* 容器接口
*/
public interface Container<T> {
Iterator<T> iterator();
}
/**
* 书籍类
*/
public class Book {
private String name;
public Book(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
/**
* 书架(容器)
*/
public class Bookshelf implements Container<Book> {
private Book[] books;
private int count = 0;
public Bookshelf(int size) {
books = new Book[size];
}
public void addBook(Book book) {
if (count < books.length) {
books[count++] = book;
}
}
@Override
public Iterator<Book> iterator() {
return new BookshelfIterator();
}
// 内部迭代器类
private class BookshelfIterator implements Iterator<Book> {
private int index = 0;
@Override
public boolean hasNext() {
return index < count;
}
@Override
public Book next() {
return books[index++];
}
}
}
使用:
public class Client {
public static void main(String[] args) {
Bookshelf bookshelf = new Bookshelf(5);
bookshelf.addBook(new Book("设计模式"));
bookshelf.addBook(new Book("Java 编程思想"));
bookshelf.addBook(new Book("深入理解 JVM"));
// 使用迭代器遍历
Iterator<Book> iterator = bookshelf.iterator();
while (iterator.hasNext()) {
Book book = iterator.next();
System.out.println("📚 " + book.getName());
}
}
}
输出:
📚 设计模式
📚 Java 编程思想
📚 深入理解 JVM
🔥 Java 中的迭代器
Java 内置了迭代器模式:
List<String> list = Arrays.asList("A", "B", "C");
// 方式1:使用 Iterator
Iterator<String> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
// 方式2:增强 for 循环(底层使用迭代器)
for (String s : list) {
System.out.println(s);
}
✅ 适用场景
- 访问集合对象内容而不暴露内部结构
- 为不同的集合提供统一的遍历接口
- 需要多种遍历方式时
小结
迭代器模式:统一遍历接口,隐藏集合内部结构。
Java 的 Iterator 接口和增强 for 循环就是迭代器模式的应用。
👉 下一篇:中介者模式
