迭代器模式
(Iterator Pattern):允许用户对容器对象中的元素进行迭代访问
,而无需暴露
对象的底层
数据结构。迭代器模式定义了一种顺序访问聚合
对象元素的方法
,而不依赖于具体
的存储
方式。
基本组成
迭代器接口
(Iterator):定义了迭代器对象需要实现的方法,如next()(移动到下一个元素)、hasNext()(检查是否有下一个元素)、remove()(删除当前元素)等。
具体迭代器
(ConcreteIterator):实现了Iterator接口,生成迭代器的实例,记录遍历过程中的当前位置。
聚合接口
(Aggregate):定义了创建迭代器对象的方法,通常是一个名为createIterator()的方法。
具体聚合
(ConcreteAggregate):实现了Aggregate接口,返回一个与该具体聚合相关联的ConcreteIterator对象的实例。
优点
支持以不同的方式遍历一个聚合对象。
不暴露聚合对象的内部结构,提供了一个安全的方式来访问聚合对象。
提供了一个统一的接口,可以用来处理不同的迭代器。
缺点
可能会增加一些额外的复杂性,特别是当聚合对象有多种不同的访问方式时。
适用场景
当需要访问一个聚合对象的元素,而又不暴露其内部结构时。
当需要对聚合对象提供多种不同的访问路径时。
示例
:
java
// 迭代器接口
public interface IterableCollection {
Iterator createIterator();
}
// 具体聚合
public class ListCollection implements IterableCollection{
private List list;
public ListCollection(List list) {
this.list = list;
}
@Override
public Iterator createIterator() {
return list.iterator();
}
}
public class IteratorExample {
public static void main(String[] args) {
ListCollection collection = new ListCollection(Arrays.asList("a", "b", "c"));
Iterator iterator = collection.createIterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
ListCollection实现了IterableCollection接口,并提供了createIterator()方法,该方法返回了一个List的iterator()。然后在主程序中,我们通过调用createIterator()方法获取迭代器,并通过迭代器的hasNext()和next()方法遍历集合中的元素