深入解析迭代器模式:原理、代码示例与应用场景
什么是迭代器模式?
迭代器模式是一种行为设计模式,它提供了一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。通过这种方式,可以简化聚合对象的遍历操作。
迭代器模式的核心角色
- 迭代器接口(Iterator):定义遍历元素所需的操作,如
next()、hasNext()等。 - 具体迭代器(ConcreteIterator):实现迭代器接口,负责管理当前遍历的位置。
- 聚合接口(Aggregate):定义创建迭代器的方法。
- 具体聚合(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());
}
}
}
总结
迭代器模式通过将遍历逻辑封装到迭代器中,实现了聚合对象与遍历逻辑的解耦。它不仅提高了代码的复用性,还增强了系统的灵活性。