java常见面试题:什么是迭代器模式(Iterator Pattern)?如何实现迭代器模式?

发布时间:2024年01月11日

迭代器模式(Iterator Pattern)是设计模式中的一种,它提供了一种顺序访问一个聚合对象(如列表、集合等)中各个元素的方法,而又不需要暴露该对象的内部表示。使用迭代器模式,可以方便地遍历一个聚合对象的所有元素,而不需要了解该对象的底层结构。

迭代器模式主要包含以下角色:

  1. 迭代器接口(Iterator):定义访问和遍历元素的接口,通常包含 hasNext() 和 next() 等方法。
  2. 具体迭代器(Concrete Iterator):实现迭代器接口,完成对聚合对象的遍历,并记录当前遍历的位置。
  3. 聚合接口(Aggregate):定义创建相应迭代器对象的接口。
  4. 具体聚合(Concrete Aggregate):实现创建相应迭代器的接口,返回一个具体迭代器实例。

以下是使用 Java 实现迭代器模式的示例:

 

java复制代码

// 迭代器接口
public interface Iterator<T> {
boolean hasNext();
T next();
}
// 聚合接口
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);
}
public void remove(T item) {
list.remove(item);
}
@Override
public Iterator<T> createIterator() {
return new ConcreteIterator<>(list);
}
}
// 具体迭代器
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() {
if (hasNext()) {
return list.get(index++);
}
return null;
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Aggregate<String> aggregate = new ConcreteAggregate<>();
aggregate.add("Item 1");
aggregate.add("Item 2");
aggregate.add("Item 3");
Iterator<String> iterator = aggregate.createIterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}

在这个示例中,我们首先定义了一个迭代器接口?Iterator,它包含?hasNext()?和?next()?方法。然后,我们定义了一个聚合接口?Aggregate,它包含?createIterator()?方法,用于创建相应聚合对象的迭代器。

接着,我们创建了一个具体聚合类?ConcreteAggregate,它实现了?Aggregate?接口,并包含一个内部列表来存储元素。ConcreteAggregate?的?createIterator()?方法返回一个具体迭代器实例,用于遍历聚合对象中的元素。

最后,我们创建了一个具体迭代器类?ConcreteIterator,它实现了?Iterator?接口,并使用一个内部索引来记录当前遍历的位置。hasNext()?方法检查是否还有更多元素,next()?方法返回下一个元素,并将索引递增。

在客户端代码中,我们创建了一个具体聚合对象,向其中添加了一些元素,并使用聚合对象的?createIterator()?方法创建了一个迭代器。然后,我们使用迭代器的?hasNext()?和?next()?方法遍历了聚合对象中的所有元素。

文章来源:https://blog.csdn.net/dxl920807/article/details/135538873
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。