Java实现迭代器模式
迭代器模式是一种行为型设计模式,它允许客户端通过迭代器逐个遍历集合对象中的元素,而无需暴露集合的内部表示。该模式将迭代过程封装在一个独立的迭代器对象中,使得客户端可以独立地操作集合对象和迭代器对象。
适用的场景:
1. 当需要遍历一个聚合对象的元素但又不想暴露其内部表示时,可以使用迭代器模式。
2. 当需要在不同的聚合对象上共享元素遍历的逻辑时,可以使用迭代器模式。
3. 当需要提供不同的遍历方式时,可以使用迭代器模式。
该设计模式的主要好处:
1. 分离了集合对象和遍历逻辑,使得代码更加易于维护和扩展。
2. 提供了对不同聚合对象的统一访问接口,增强了代码的灵活性和可复用性。
3. 简化了客户端的使用,使得客户端不需要关心集合对象的内部结构。
以下是Java完整样例代码:
// 迭代器接口
interface Iterator<T> {
boolean hasNext();
T next();
}
// 聚合接口
interface Aggregate {
Iterator<String> createIterator();
}
// 具体迭代器实现
class ConcreteIterator implements Iterator<String> {
private String[] names;
private int position;
public ConcreteIterator(String[] names) {
this.names = names;
this.position = 0;
}
public boolean hasNext() {
return position < names.length;
}
public String next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
String name = names[position];
position++;
return name;
}
}
// 具体聚合实现
class ConcreteAggregate implements Aggregate {
private String[] names;
public ConcreteAggregate(String[] names) {
this.names = names;
}
public Iterator<String> createIterator() {
return new ConcreteIterator(names);
}
}
public class IteratorPatternDemo {
public static void main(String[] args) {
String[] names = {"Alice", "Bob", "Charlie", "David"};
Aggregate aggregate = new ConcreteAggregate(names);
Iterator<String> iterator = aggregate.createIterator();
while (iterator.hasNext()) {
String name = iterator.next();
System.out.println(name);
}
}
}
在上述代码中,我们定义了一个迭代器接口(Iterator)和一个聚合接口(Aggregate)。具体的迭代器(ConcreteIterator)和聚合(ConcreteAggregate)实现了对应的接口。
在`IteratorPatternDemo`的主方法中,我们通过创建一个具体的聚合对象(ConcreteAggregate)来获取一个迭代器对象(ConcreteIterator)。然后使用迭代器来遍历聚合对象中的元素,最后输出每个元素的名称。