Java实现迭代器模式

迭代器模式是一种行为型设计模式,它允许客户端通过迭代器逐个遍历集合对象中的元素,而无需暴露集合的内部表示。该模式将迭代过程封装在一个独立的迭代器对象中,使得客户端可以独立地操作集合对象和迭代器对象。 适用的场景: 1. 当需要遍历一个聚合对象的元素但又不想暴露其内部表示时,可以使用迭代器模式。 2. 当需要在不同的聚合对象上共享元素遍历的逻辑时,可以使用迭代器模式。 3. 当需要提供不同的遍历方式时,可以使用迭代器模式。 该设计模式的主要好处: 1. 分离了集合对象和遍历逻辑,使得代码更加易于维护和扩展。 2. 提供了对不同聚合对象的统一访问接口,增强了代码的灵活性和可复用性。 3. 简化了客户端的使用,使得客户端不需要关心集合对象的内部结构。 以下是Java完整样例代码: ```java // 迭代器接口 interface Iterator<T> { boolean hasNext(); T next(); } // 聚合接口 interface Aggregate { Iterator<String> createIterator(); } // 具体迭代器实现 class ConcreteIterator implements Iterator<String> { private String[] names; private int position; public ConcreteIterator(String[] names) { this.names = names; this.position = 0; } public boolean hasNext() { return position < names.length; } public String next() { if (!hasNext()) { throw new NoSuchElementException(); } String name = names[position]; position++; return name; } } // 具体聚合实现 class ConcreteAggregate implements Aggregate { private String[] names; public ConcreteAggregate(String[] names) { this.names = names; } public Iterator<String> createIterator() { return new ConcreteIterator(names); } } public class IteratorPatternDemo { public static void main(String[] args) { String[] names = {"Alice", "Bob", "Charlie", "David"}; Aggregate aggregate = new ConcreteAggregate(names); Iterator<String> iterator = aggregate.createIterator(); while (iterator.hasNext()) { String name = iterator.next(); System.out.println(name); } } } ``` 在上述代码中,我们定义了一个迭代器接口(Iterator)和一个聚合接口(Aggregate)。具体的迭代器(ConcreteIterator)和聚合(ConcreteAggregate)实现了对应的接口。 在`IteratorPatternDemo`的主方法中,我们通过创建一个具体的聚合对象(ConcreteAggregate)来获取一个迭代器对象(ConcreteIterator)。然后使用迭代器来遍历聚合对象中的元素,最后输出每个元素的名称。