以下是 迭代器模式 (Iterator Pattern) 的详细介绍,包含定义、优缺点、应用场景及代码实现:
List
、Set
通过 Iterator
遍历元素。
以下通过 自定义书架的迭代遍历 案例演示迭代器模式:
/**
* 迭代器接口:定义遍历集合的方法
*/
public interface Iterator<T> {
boolean hasNext(); // 是否还有下一个元素
T next(); // 获取下一个元素
void remove(); // 移除当前元素(可选实现)
}
/**
* 聚合接口:定义创建迭代器的方法
*/
public interface Aggregate<T> {
Iterator<T> createIterator();
}
import java.util.ArrayList;
import java.util.List;
/**
* 具体聚合类:书架(存储书籍)
*/
public class BookShelf implements Aggregate<Book> {
private final List<Book> books = new ArrayList<>();
// 添加书籍
public void addBook(Book book) {
books.add(book);
}
// 创建迭代器(正序)
@Override
public Iterator<Book> createIterator() {
return new BookShelfIterator(this);
}
// 获取书籍数量
public int size() {
return books.size();
}
// 根据索引获取书籍
public Book getBookAt(int index) {
return books.get(index);
}
}
/**
* 书籍类(数据模型)
*/
public class Book {
private final String title;
public Book(String title) {
this.title = title;
}
public String getTitle() {
return title;
}
}
/**
* 具体迭代器类:正序遍历书架
*/
public class BookShelfIterator implements Iterator<Book> {
private final BookShelf bookShelf;
private int currentIndex = 0;
public BookShelfIterator(BookShelf bookShelf) {
this.bookShelf = bookShelf;
}
@Override
public boolean hasNext() {
return currentIndex < bookShelf.size();
}
@Override
public Book next() {
Book book = bookShelf.getBookAt(currentIndex);
currentIndex++;
return book;
}
@Override
public void remove() {
throw new UnsupportedOperationException("该迭代器不支持删除操作");
}
}
public class Client {
public static void main(String[] args) {
// 创建书架并添加书籍
BookShelf shelf = new BookShelf();
shelf.addBook(new Book("Java 编程思想"));
shelf.addBook(new Book("设计模式:可复用面向对象软件的基础"));
shelf.addBook(new Book("Effective Java"));
// 获取迭代器并遍历
Iterator<Book> iterator = shelf.createIterator();
while (iterator.hasNext()) {
Book book = iterator.next();
System.out.println("书名:" + book.getTitle());
}
}
}
书名:Java 编程思想
书名:设计模式:可复用面向对象软件的基础
书名:Effective Java
+----------------+ +----------------+
| Aggregate | <------+ | Iterator |
+----------------+ +----------------+
| +createIterator() | +hasNext() |
+----------------+ | +next() |
| +remove() |
+----------------+
^ ^
| |
+----------------+ +----------------+
| ConcreteAggregate | ConcreteIterator|
+----------------+ +----------------+
| +createIterator() | -currentIndex |
+----------------+ +----------------+
Iterator<T>
)。
modCount
校验版本号)。
迭代器模式在 Java 生态中广泛应用,例如:
List.iterator()
、Set.iterator()
。
DirectoryStream
遍历目录内容。
ResultSet
逐行读取查询结果。
掌握该模式能显著提升代码的可维护性和扩展性,尤其是在处理复杂数据结构时。