迭代器模式
基础概念
什么是迭代器模式?
答案: 迭代器模式(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);
}练习题
- 迭代器模式的应用场景?
- Java的Iterator和Iterable的区别?
- 如何实现双向迭代器?