📖 迭代器模式(Iterator)
迭代器模式是一种行为设计模式,它通过提供统一的遍历接口,解耦集合数据的存储结构与遍历逻辑,使客户端无需了解集合内部实现即可访问元素。
✨ 模式动机
在软件开发中,集合对象的存储结构可能会随着需求变化而改变,但客户端代码通常只关心如何遍历集合中的元素。迭代器模式通过引入一个迭代器对象,隐藏集合的复杂实现,使得客户端代码可以以一致的方式访问集合中的元素。
🛠️ 模式结构
迭代器模式的主要结构包括:
- 迭代器接口(Iterator):定义遍历元素的方法。
- 具体迭代器(Concrete Iterator):实现迭代器接口,负责具体的遍历逻辑。
- 集合接口(Aggregate):定义创建迭代器的方法。
- 具体集合(Concrete Aggregate):实现集合接口,返回具体迭代器实例。
💻 示例代码
以下是一个使用 Java 实现迭代器模式的示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| public interface Iterator<T> { boolean hasNext(); T next(); }
public interface Aggregate<T> { Iterator<T> createIterator(); }
public class ConcreteAggregate<T> implements Aggregate<T> { private List<T> items = new ArrayList<>();
public void addItem(T item) { items.add(item); }
@Override public Iterator<T> createIterator() { return new ConcreteIterator<>(items); } }
public class ConcreteIterator<T> implements Iterator<T> { private List<T> items; private int position = 0;
public ConcreteIterator(List<T> items) { this.items = items; }
@Override public boolean hasNext() { return position < items.size(); }
@Override public T next() { return items.get(position++); } }
public class Client { public static void main(String[] args) { ConcreteAggregate<String> aggregate = new ConcreteAggregate<>(); aggregate.addItem("A"); aggregate.addItem("B"); aggregate.addItem("C");
Iterator<String> iterator = aggregate.createIterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } } }
|
📚 优缺点
优点
- 提供统一的遍历接口,简化客户端代码。
- 支持多种遍历方式(正序、逆序等)。
- 符合单一职责原则和开闭原则。
缺点
- 增加了类的数量,可能导致系统复杂性提高。
- 对于简单集合,使用迭代器可能显得多余。
🔗 相关设计模式
- 组合模式(Composite):与迭代器模式结合使用,可以遍历复杂的树形结构。
- 访问者模式(Visitor):可以与迭代器模式结合,处理集合中的元素。
📖 附录
📘 推荐阅读
- 《设计模式:可复用面向对象软件的基础》——Erich Gamma 等
- 《Head First 设计模式》——Eric Freeman 等
🔗 参考链接