迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。[DP]
首先,定义一个接口Iterator,它包含了遍历聚合对象所需的方法:
public interface Iterator<T> {
boolean hasNext(); // 是否有下一个元素
T next(); // 返回下一个元素
}
然后,定义一个具体的迭代器实现,比如ConcreteIterator,它实现了Iterator接口,并持有一个对聚合对象的引用:
public class ConcreteIterator<T> implements Iterator<T> {
private List<T> aggregation; // 持有聚合对象的引用
private int currentIndex; // 当前遍历的位置
public ConcreteIterator(List<T> aggregation) {
this.aggregation = aggregation;
this.currentIndex = 0;
}
@Override
public boolean hasNext() {
return currentIndex < aggregation.size();
}
@Override
public T next() {
if (hasNext()) {
return aggregation.get(currentIndex++);
}
throw new NoSuchElementException("No more elements in the aggregation.");
}
}
接下来,定义一个聚合对象接口Aggregation,它包含了一个创建迭代器的方法:
public interface Aggregation<T> {
Iterator<T> createIterator(); // 创建迭代器
}
然后,定义一个具体的聚合对象实现,比如ConcreteAggregation,它实现了Aggregation接口,并持有一个元素列表:
import java.util.ArrayList;
import java.util.List;
public class ConcreteAggregation<T> implements Aggregation<T> {
private List<T> elements = new ArrayList<>();
public void add(T element) {
elements.add(element);
}
public void remove(T element) {
elements.remove(element);
}
@Override
public Iterator<T> createIterator() {
return new ConcreteIterator<>(elements);
}
}
最后,我们演示如何使用聚合对象和迭代器来遍历元素:
public class Client {
public static void main(String[] args) {
// 创建聚合对象并添加元素
Aggregation<String> aggregation = new ConcreteAggregation<>();
aggregation.add("Apple");
aggregation.add("Banana");
aggregation.add("Cherry");
// 获取迭代器
Iterator<String> iterator = aggregation.createIterator();
// 使用迭代器遍历聚合对象
while (iterator.hasNext()) {
String fruit = iterator.next();
System.out.println(fruit);
}
}
}