Skip to content

迭代器模式

基础概念

什么是迭代器模式?

答案: 迭代器模式(Iterator Pattern)提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。

使用场景

  • 访问聚合对象的内容而无需暴露内部表示
  • 支持对聚合对象的多种遍历
  • 为遍历不同的聚合结构提供统一接口

优点

  • 支持以不同方式遍历聚合对象
  • 简化聚合类
  • 符合单一职责原则

缺点

  • 增加系统复杂性

实现方式

java
// 迭代器接口
public interface Iterator<T> {
    boolean hasNext();
    T next();
}

// 聚合接口
public interface Aggregate<T> {
    Iterator<T> createIterator();
}

// 具体迭代器
public class ConcreteIterator<T> implements Iterator<T> {
    private List<T> list;
    private int position = 0;

    public ConcreteIterator(List<T> list) {
        this.list = list;
    }

    @Override
    public boolean hasNext() {
        return position < list.size();
    }

    @Override
    public T next() {
        return list.get(position++);
    }
}

// 具体聚合
public class ConcreteAggregate<T> implements Aggregate<T> {
    private List<T> list = new ArrayList<>();

    public void add(T item) {
        list.add(item);
    }

    @Override
    public Iterator<T> createIterator() {
        return new ConcreteIterator<>(list);
    }
}

// 使用
ConcreteAggregate<String> aggregate = new ConcreteAggregate<>();
aggregate.add("A");
aggregate.add("B");
aggregate.add("C");

Iterator<String> iterator = aggregate.createIterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}

Java中的迭代器

java
// Java集合框架中的迭代器
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}

// 增强for循环(语法糖)
for (String item : list) {
    System.out.println(item);
}

练习题

  1. 迭代器模式的应用场景?
  2. Java的Iterator和Iterable的区别?
  3. 如何实现双向迭代器?

Released under the MIT License.