迭代器模式(Iterator Pattern)是一种行为型模式,它允许访问一个聚合对象的内部元素,而又无需暴露该对象的内部表示。
迭代器模式的主要角色如下:
- 聚合(Aggregate):定义了创建迭代器对象的接口。
- 迭代器(Iterator):定义了遍历聚合对象的接口。
- 具体聚合(ConcreteAggregate):实现了聚合接口,并创建了迭代器对象。
- 具体迭代器(ConcreteIterator):实现了迭代器接口,并定义了具体的遍历算法。
迭代器模式的实现如下:
// 聚合
public interface Aggregate {
Iterator iterator();
}
// 迭代器
public interface Iterator {
boolean hasNext();
Object next();
}
// 具体聚合
public class ConcreteAggregate implements Aggregate {
private List<Object> list = new ArrayList<>();
public void add(Object obj) {
list.add(obj);
}
public Iterator iterator() {
return new ConcreteIterator(this);
}
}
// 具体迭代器
public class ConcreteIterator implements Iterator {
private ConcreteAggregate aggregate;
private int index = 0;
public ConcreteIterator(ConcreteAggregate aggregate) {
this.aggregate = aggregate;
}
@Override
public boolean hasNext() {
return index < aggregate.list.size();
}
@Override
public Object next() {
return aggregate.list.get(index++);
}
}
public class Main {
public static void main(String[] args) {
// 创建聚合
Aggregate aggregate = new ConcreteAggregate();
// 添加元素
aggregate.add("a");
aggregate.add("b");
aggregate.add("c");
// 获取迭代器
Iterator iterator = aggregate.iterator();
// 遍历元素
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
迭代器模式的优点如下:
- 封装了遍历算法,提高了聚合对象的封装性。
- 简化了客户端代码,客户端只需关注如何获取迭代器对象即可。
- 提高了聚合对象的扩展性,可以根据需要添加新的遍历算法。
迭代器模式的应用场景如下:
- 需要访问一个聚合对象的内部元素时。
- 需要对聚合对象的内部元素进行遍历时。
- 需要提高聚合对象的封装性和扩展性时。
迭代器模式的注意事项如下:
- 迭代器模式的实现需要考虑聚合对象的结构,以便迭代器能够正确地遍历聚合对象的内部元素。
- 迭代器模式可以与其他模式结合使用,例如与适配器模式结合使用,可以将一个聚合对象的迭代器接口转换成另一个接口。