迭代器模式
迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供一种访问容器对象中各个元素的方法,而又不暴露该容器对象的内部实现。
在迭代器模式中,容器对象包含一个迭代器,该迭代器负责遍历容器中的元素。迭代器模式将容器对象和迭代器对象分离,使得容器对象可以独立于其迭代器实现变化,从而提高了系统的灵活性和可扩展性。
迭代器模式包含两个核心角色:
- 迭代器(Iterator):定义访问和遍历容器元素的接口。
- 容器(Container):定义容器的接口,负责提供创建迭代器的方法。
迭代器模式的优点是:
- 简化了容器的接口,使得容器可以独立于其迭代器的具体实现而变化。
- 封装了容器内部的数据结构,隐藏了细节,使得对容器的访问更加安全和简单。
- 支持多种遍历方式,例如正序遍历、倒序遍历等。
- 可以使用不同的迭代器来遍历容器,从而实现不同的遍历算法,提高了灵活性和扩展性。
迭代器模式的缺点是:
- 增加了系统的复杂度,需要额外的代码来实现迭代器对象。
- 对于简单的容器对象,使用迭代器模式可能会增加代码量和复杂度,反而不如直接使用容器的内部实现来的简单。
以下是一个简单的 Java 实现迭代器模式的示例代码:
1.迭代器接口 Iterator:
public interface Iterator<T> {
boolean hasNext();
T next();
}
2.容器接口 Container:
public interface Container<T> {
Iterator<T> createIterator();
}
3.具体容器类 ConcreteContainer:
import java.util.ArrayList;
public class ConcreteContainer<T> implements Container<T> {
private ArrayList<T> list;
public ConcreteContainer() {
this.list = new ArrayList<>();
}
public void add(T element) {
list.add(element);
}
public void remove(T element) {
list.remove(element);
}
public Iterator<T> createIterator() {
return new ConcreteIterator<>(list);
}
}
4.具体迭代器类 ConcreteIterator:
import java.util.ArrayList;
public class ConcreteIterator<T> implements Iterator<T> {
private ArrayList<T> list;
private int cursor;
public ConcreteIterator(ArrayList<T> list) {
this.list = list;
this.cursor = 0;
}
public boolean hasNext() {
return cursor < list.size();
}
public T next() {
T element = list.get(cursor);
cursor++;
return element;
}
}
5.使用示例:
public class IteratorDemo {
public static void main(String[] args) {
Container<String> container = new ConcreteContainer<>();
container.add("A");
container.add("B");
container.add("C");
Iterator<String> iterator = container.createIterator();
while (iterator.hasNext()) {
String element = iterator.next();
System.out.println(element);
}
}
}
6.输出结果:
A
B
C
在这个示例中,我们使用了迭代器模式来访问一个容器对象中的元素。具体容器类 ConcreteContainer 实现了容器接口 Container,负责提供创建迭代器的方法。具体迭代器类 ConcreteIterator 实现了迭代器接口 Iterator,负责遍历容器中的元素。最后,在使用示例中,我们通过容器对象的 createIterator 方法来获取一个迭代器对象,并通过迭代器对象的 hasNext 和 next 方法遍历容器中的元素。