Skip to content

迭代器

字数: 0 字 时长: 0 分钟

简介

迭代器模式(Iterator Pattern)的核心思想是:提供了一种方法,顺序访问一个集合对象内部的元素,而不暴露集合的内部结构

UML 类图

iterator.webp

  • 迭代器接口(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);
    }
}