深入解析迭代器模式:原理、代码示例与应用场景

86 阅读1分钟

深入解析迭代器模式:原理、代码示例与应用场景

什么是迭代器模式?

迭代器模式是一种行为设计模式,它提供了一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。通过这种方式,可以简化聚合对象的遍历操作。

迭代器模式的核心角色

  1. 迭代器接口(Iterator):定义遍历元素所需的操作,如next()hasNext()等。
  2. 具体迭代器(ConcreteIterator):实现迭代器接口,负责管理当前遍历的位置。
  3. 聚合接口(Aggregate):定义创建迭代器的方法。
  4. 具体聚合(ConcreteAggregate):实现聚合接口,返回一个具体迭代器的实例。

代码示例

Java实现

public interface Iterator<T> {
    boolean hasNext();
    T next();
}

public class ConcreteIterator<T> implements Iterator<T> {
    private List<T> list;
    private int index = 0;

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

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

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

public interface Aggregate<T> {
    Iterator<T> createIterator();
}

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);
    }
}

应用场景

假设我们有一个电商平台,需要遍历用户的购物车中的商品。使用迭代器模式可以轻松实现这一功能,而无需暴露购物车的内部数据结构。

public class ShoppingCart {
    private List<Product> products = new ArrayList<>();

    public void addProduct(Product product) {
        products.add(product);
    }

    public Iterator<Product> createIterator() {
        return new ConcreteIterator<>(products);
    }
}

public class Main {
    public static void main(String[] args) {
        ShoppingCart cart = new ShoppingCart();
        cart.addProduct(new Product("iPhone", 999));
        cart.addProduct(new Product("MacBook", 1999));

        Iterator<Product> iterator = cart.createIterator();
        while (iterator.hasNext()) {
            Product product = iterator.next();
            System.out.println(product.getName() + " - $" + product.getPrice());
        }
    }
}

总结

迭代器模式通过将遍历逻辑封装到迭代器中,实现了聚合对象与遍历逻辑的解耦。它不仅提高了代码的复用性,还增强了系统的灵活性。