在迭代器模式中,有两个主要角色:
1. 迭代器接口(Iterator): 定义了遍历元素的方法,包括判断是否还有下一个元素、获取下一个元素等。
public interface Iterator {
boolean hasNext();
Object next();
}
2. 具体迭代器(ConcreteIterator): 实现了迭代器接口,负责实现对聚合对象的遍历。
public class ConcreteIterator implements Iterator {
private ConcreteAggregate aggregate;
private int index = 0;
public ConcreteIterator(ConcreteAggregate aggregate) {
this.aggregate = aggregate;
}
@Override
public boolean hasNext() {
return index < aggregate.size();
}
@Override
public Object next() {
if (hasNext()) {
return aggregate.getElement(index++);
}
return null;
}
}
3. 聚合接口(Aggregate): 定义了创建迭代器对象的接口。
public interface Aggregate {
Iterator createIterator();
// 其他聚合操作
}
4. 具体聚合(ConcreteAggregate): 实现了聚合接口,负责创建具体的迭代器对象。
import java.util.ArrayList;
import java.util.List;
public class ConcreteAggregate implements Aggregate {
private List<Object> elements = new ArrayList<>();
public void addElement(Object element) {
elements.add(element);
}
public Object getElement(int index) {
return elements.get(index);
}
public int size() {
return elements.size();
}
@Override
public Iterator createIterator() {
return new ConcreteIterator(this);
}
}
5. 客户端代码: 使用迭代器模式来遍历聚合对象中的元素。
public class Client {
public static void main(String[] args) {
ConcreteAggregate aggregate = new ConcreteAggregate();
aggregate.addElement("Element 1");
aggregate.addElement("Element 2");
aggregate.addElement("Element 3");
Iterator iterator = aggregate.createIterator();
while (iterator.hasNext()) {
Object element = iterator.next();
System.out.println("Element: " + element);
}
}
}
在这个例子中,迭代器模式使得客户端代码可以通过统一的接口遍历不同类型的聚合对象,而不需要了解其内部结构。这提高了代码的灵活性和可维护性。
转载请注明出处:http://www.zyzy.cn/article/detail/13953/设计模式