迭代器
字数: 0 字 时长: 0 分钟
简介
迭代器模式(Iterator Pattern)的核心思想是:提供了一种方法,顺序访问一个集合对象内部的元素,而不暴露集合的内部结构。
UML 类图
- 迭代器接口(Iterator):定义访问和遍历元素的方法
- 具体迭代器(ConcreteIterator):实现迭代器接口,负责具体遍历逻辑
- 聚合接口(Aggregate):定义创建迭代器对象的方法
- 具体聚合(ConcreteAggregate):实现聚合接口,返回迭代器对象
实现示例
以“流程引擎中的节点遍历”为例:
java
// 1. 定义节点类
class ProcessNode {
private String name;
public ProcessNode(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "ProcessNode: " + name;
}
}
// 2. 定义迭代器接口
interface Iterator {
boolean hasNext();
Object next();
}
// 3. 具体流程类
class Workflow {
private ProcessNode[] nodes;
private int size;
public Workflow(int capacity) {
nodes = new ProcessNode[capacity];
size = 0;
}
// 添加节点到流程中
public void addNode(ProcessNode node) {
if (size < nodes.length) {
nodes[size++] = node;
}
}
// 返回流程的迭代器
public Iterator iterator() {
return new WorkflowIterator();
}
// 4. 具体迭代器
private class WorkflowIterator implements Iterator {
private int index;
public WorkflowIterator() {
index = 0;
}
@Override
public boolean hasNext() {
return index < size;
}
@Override
public Object next() {
if (hasNext()) {
return nodes[index++];
}
return null;
}
}
}
// 5. 调用示例
public static void main(String[] args) {
Workflow workflow = new Workflow(5);
workflow.addNode(new ProcessNode("开始"));
workflow.addNode(new ProcessNode("审批"));
workflow.addNode(new ProcessNode("通知"));
workflow.addNode(new ProcessNode("结束"));
Iterator iterator = workflow.iterator();
while (iterator.hasNext()) {
ProcessNode node = (ProcessNode) iterator.next();
System.out.println(node);
}
}