迭代器模式(Iterator Pattern)是设计模式中的一种,它提供了一种顺序访问一个聚合对象(如列表、集合等)中各个元素的方法,而又不需要暴露该对象的内部表示。使用迭代器模式,可以方便地遍历一个聚合对象的所有元素,而不需要了解该对象的底层结构。
迭代器模式主要包含以下角色:
- 迭代器接口(Iterator):定义访问和遍历元素的接口,通常包含 hasNext() 和 next() 等方法。
- 具体迭代器(Concrete Iterator):实现迭代器接口,完成对聚合对象的遍历,并记录当前遍历的位置。
- 聚合接口(Aggregate):定义创建相应迭代器对象的接口。
- 具体聚合(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()
方法返回下一个元素,并将索引递增。文章来源:https://www.toymoban.com/news/detail-799609.html
在客户端代码中,我们创建了一个具体聚合对象,向其中添加了一些元素,并使用聚合对象的 createIterator()
方法创建了一个迭代器。然后,我们使用迭代器的 hasNext()
和 next()
方法遍历了聚合对象中的所有元素。文章来源地址https://www.toymoban.com/news/detail-799609.html
到了这里,关于java常见面试题:什么是迭代器模式(Iterator Pattern)?如何实现迭代器模式?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!