迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供了一种方法来顺序访问聚合对象中的元素,而又不需要暴露其底层表示。迭代器允许程序员遍历不同的数据结构(如列表、集合或树),而无需了解这些结构的具体实现细节。
// 聚合接口
public interface Container {
Iterator<Item> getIterator();
}
// 具体聚合类 - 数组列表容器
public class ArrayListContainer implements Container {
private Item[] items;
public ArrayListContainer(Item[] items) {
this.items = items;
}
@Override
public Iterator<Item> getIterator() {
return new ArrayListIterator();
}
private class ArrayListIterator implements Iterator<Item> {
private int position = 0;
@Override
public boolean hasNext() {
return position < items.length && items[position] != null;
}
@Override
public Item next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
return items[position++];
}
// remove() 方法在此简化示例中未实现
}
}
// 抽象迭代器接口
public interface Iterator<Item> {
boolean hasNext();
Item next();
}
// 使用示例
public class Client {
public static void main(String[] args) {
Item[] items = {new Item("A"), new Item("B"), new Item("C")};
Container container = new ArrayListContainer(items);
Iterator<Item> iterator = container.getIterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
// 简化的元素类
public class Item {
private String name;
public Item(String name) {
this.name = name;
}
@Override
public String toString() {
return "Item: " + name;
}
}
想象你有一个装满了书的书架,但书架有各种各样的形状和大小。迭代器就像是一个能够帮你找到书架上每本书的图书管理员,不论书架结构如何复杂。每次当你说“下一本”时,图书管理员都能准确地拿出一本书给你,而你并不需要知道书架内部是怎么存放书籍的。