java: Iterator Pattern
项目结构:

/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 迭代器模式 Iterator Pattern演示业务层* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/2 - 7:13* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : BusinessLinkType.java* explain : 学习 类**/package IteratorPatter.core.enums;/*** 业务链路类型枚举* 用于过滤迭代器筛选不同业务流程*/
public enum BusinessLinkType {/*** 未指定*/None,/*** 生产主链路:原料、设计、加工、质检、包装、物流*/ProductionLink,/*** 职能部门链路:财务、营销、人事、IT、培训*/DepartmentLink
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 迭代器模式 Iterator Pattern演示业务层* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/2 - 7:15* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : BusinessProcessNode.java* explain : 学习 类**/package IteratorPatter.entity;import IteratorPatter.core.enums.BusinessLinkType;
import java.util.concurrent.CompletableFuture;
import java.util.function.Supplier;/*** 珠宝业务工序节点实体* 存储工序信息与异步执行逻辑*/
public class BusinessProcessNode {/*** 工序唯一ID*/private int processId;/*** 工序名称*/private String processName;/*** 全局排序号*/private int sortOrder;/*** 归属链路类型*/private BusinessLinkType linkType;/*** 异步执行逻辑*/private Supplier<CompletableFuture<Void>> executeAsync;public int getProcessId() {return processId;}public void setProcessId(int processId) {this.processId = processId;}public String getProcessName() {return processName;}public void setProcessName(String processName) {this.processName = processName;}public int getSortOrder() {return sortOrder;}public void setSortOrder(int sortOrder) {this.sortOrder = sortOrder;}public BusinessLinkType getLinkType() {return linkType;}public void setLinkType(BusinessLinkType linkType) {this.linkType = linkType;}public Supplier<CompletableFuture<Void>> getExecuteAsync() {return executeAsync;}public void setExecuteAsync(Supplier<CompletableFuture<Void>> executeAsync) {this.executeAsync = executeAsync;}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 迭代器模式 Iterator Pattern演示业务层* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/2 - 7:17* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : FilterProcessIterator.java* explain : 学习 类**/package IteratorPatter.core.iterator;import IteratorPatter.core.enums.BusinessLinkType;
import IteratorPatter.entity.BusinessProcessNode;
import java.util.List;
import java.util.stream.Collectors;/*** 链路过滤迭代器* 根据链路类型筛选【生产链路 / 职能部门链路】* 对外统一迭代器接口,上层无需修改代码*/
public class FilterProcessIterator implements IProcessIterator {private final List<BusinessProcessNode> filteredNodes;private int currentIndex;public FilterProcessIterator(List<BusinessProcessNode> sourceNodes, BusinessLinkType linkType) {this.filteredNodes = sourceNodes.stream().filter(node -> node.getLinkType() == linkType).sorted((a, b) -> Integer.compare(a.getSortOrder(), b.getSortOrder())).collect(Collectors.toList());this.currentIndex = 0;}@Overridepublic boolean hasNext() {return currentIndex < filteredNodes.size();}@Overridepublic BusinessProcessNode next() {if (!hasNext()) {throw new IllegalStateException("过滤迭代器已遍历完毕");}BusinessProcessNode node = filteredNodes.get(currentIndex);currentIndex++;return node;}@Overridepublic void reset() {currentIndex = 0;}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 迭代器模式 Iterator Pattern演示业务层* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/2 - 7:15* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : IAggregate.java* explain : 学习 类**/package IteratorPatter.core.iterator;
/*** 聚合集合抽象接口* Iterator Pattern:提供创建迭代器入口* @param <T> 集合内元素类型*/
public interface IAggregate<T> {/*** 创建标准正向迭代器* @return 迭代器实例*/IIterator<T> createIterator();
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 迭代器模式 Iterator Pattern演示业务层* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/2 - 7:13* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : IIterator.java* explain : 学习 类**/package IteratorPatter.core.iterator;/*** 迭代器通用顶层接口* Iterator Pattern 抽象迭代器* @param <T> 遍历元素类型*/
public interface IIterator<T> {/*** 判断是否存在下一个元素* @return true存在,false遍历结束*/boolean hasNext();/*** 获取下一个元素* @return 实体对象*/T next();/*** 重置迭代指针到起始位置*/void reset();
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 迭代器模式 Iterator Pattern演示业务层* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/2 - 7:14* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : IProcessIterator.java* explain : 学习 类**/package IteratorPatter.core.iterator;import IteratorPatter.entity.BusinessProcessNode;/*** 工序迭代器专用接口别名*/
public interface IProcessIterator extends IIterator<BusinessProcessNode> {
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 迭代器模式 Iterator Pattern演示业务层* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/2 - 7:16* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : JewelleryProcessIterator.java* explain : 学习 类**/package IteratorPatter.core.iterator;import IteratorPatter.entity.BusinessProcessNode;
import java.util.List;/*** 基础正向工序迭代器* 从头到尾顺序遍历工序节点* 只读线程安全*/
public class JewelleryProcessIterator implements IProcessIterator {private final List<BusinessProcessNode> sourceNodes;private int currentIndex;public JewelleryProcessIterator(List<BusinessProcessNode> sourceNodes) {this.sourceNodes = sourceNodes;this.currentIndex = 0;}@Overridepublic boolean hasNext() {return currentIndex < sourceNodes.size();}@Overridepublic BusinessProcessNode next() {if (!hasNext()) {throw new IllegalStateException("迭代器已到达集合末尾,无更多元素");}BusinessProcessNode node = sourceNodes.get(currentIndex);currentIndex++;return node;}@Overridepublic void reset() {currentIndex = 0;}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 迭代器模式 Iterator Pattern演示业务层* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/2 - 7:16* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : ReverseProcessIterator.java* explain : 学习 类**/package IteratorPatter.core.iterator;import IteratorPatter.entity.BusinessProcessNode;
import java.util.List;/*** 反向工序迭代器* 从末尾向前倒序遍历*/
public class ReverseProcessIterator implements IProcessIterator {private final List<BusinessProcessNode> sourceNodes;private int currentIndex;public ReverseProcessIterator(List<BusinessProcessNode> sourceNodes) {this.sourceNodes = sourceNodes;this.currentIndex = sourceNodes.size() - 1;}@Overridepublic boolean hasNext() {return currentIndex >= 0;}@Overridepublic BusinessProcessNode next() {if (!hasNext()) {throw new IllegalStateException("反向迭代器遍历完成,不存在下一项");}BusinessProcessNode node = sourceNodes.get(currentIndex);currentIndex--;return node;}@Overridepublic void reset() {currentIndex = sourceNodes.size() - 1;}
}
/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 迭代器模式 Iterator Pattern演示业务层* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 17* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/2 - 7:18* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : RetryHelper.java* explain : 学习 类**/package IteratorPatter.infrastructure.resilience;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionException;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;/*** 通用异步重试工具类* 用于工序、定时任务异常自动重试*/
public class RetryHelper {private static final Logger log = LoggerFactory.getLogger(RetryHelper.class);/*** 执行异步任务,失败自动重试* @param action 异步业务任务* @param maxRetryTimes 最大重试次数* @param delayMs 重试间隔毫秒* @param skipExceptionSet 不需要重试的异常类型* @return true执行成功,false多次重试失败*/public CompletableFuture<Boolean> executeWithRetryAsync(Supplier<CompletableFuture<Void>> action,int maxRetryTimes,long delayMs,Set<Class<? extends Exception>> skipExceptionSet) {int[] currentTimesWrapper = {0};return attempt(action, maxRetryTimes, delayMs, currentTimesWrapper, skipExceptionSet);}/*** 递归重试核心方法*/private CompletableFuture<Boolean> attempt(Supplier<CompletableFuture<Void>> action,int maxRetry,long delayMs,int[] timesWrapper,Set<Class<? extends Exception>> skipEx) {return action.get().thenApply(unused -> {int curr = timesWrapper[0];if (curr > 0) {log.info("业务执行成功!经过{}次重试", curr);}return true;}).exceptionally(ex -> {Throwable rootCause = ex.getCause() == null ? ex : ex.getCause();Class<?> expCls = rootCause.getClass();if (skipEx != null && skipEx.contains(expCls)) {log.error("捕获无需重试异常,终止任务", rootCause);throw new CompletionException(rootCause);}timesWrapper[0]++;int currCount = timesWrapper[0];if (currCount > maxRetry) {log.error("已达到最大重试次数{},任务执行失败", maxRetry, rootCause);return false;}log.warn("业务异常,准备第{}/{}次重试,等待{}ms", currCount, maxRetry, delayMs, rootCause);try {TimeUnit.MILLISECONDS.sleep(delayMs);} catch (InterruptedException e) {Thread.currentThread().interrupt();log.warn("重试等待被中断,任务终止");return false;}return attempt(action, maxRetry, delayMs, timesWrapper, skipEx).join();});}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 迭代器模式 Iterator Pattern演示业务层* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 17* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/2 - 7:21* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : JewelleryProcessJob.java* explain : 学习 类**/package IteratorPatter.infrastructure.task;import IteratorPatter.core.enums.BusinessLinkType;
import IteratorPatter.infrastructure.resilience.RetryHelper;
import IteratorPatter.scheduler.BusinessProcessScheduler;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.util.concurrent.CompletableFuture;/*** Quartz定时任务Job:珠宝业务流程执行* [DisallowConcurrentExecution] 禁止任务并发运行*/
@DisallowConcurrentExecution
public class JewelleryProcessJob implements Job {private static final Logger log = LoggerFactory.getLogger(JewelleryProcessJob.class);@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {log.info("Quartz定时任务启动,任务Key:{}", context.getJobDetail().getKey());// 从JobDataMap获取依赖(替代Spring注入)BusinessProcessScheduler processScheduler = new BusinessProcessScheduler();RetryHelper retryHelper = new RetryHelper();String linkTypeStr = context.getJobDetail().getJobDataMap().getString("TargetLinkType");BusinessLinkType targetLink;try {targetLink = BusinessLinkType.valueOf(linkTypeStr);} catch (Exception e) {targetLink = BusinessLinkType.None;}CompletableFuture<Boolean> future;if (targetLink == BusinessLinkType.None) {future = retryHelper.executeWithRetryAsync(processScheduler::runFullAllProcessAsync,3,3000,null);} else {BusinessLinkType finalTargetLink = targetLink;future = retryHelper.executeWithRetryAsync(() -> processScheduler.runFilterLinkAsync(finalTargetLink),3,3000,null);}Boolean success = future.join();if (!success) {log.error("定时业务任务多次重试后仍然执行失败,请人工核查!");} else {log.info("Quartz定时任务正常执行完成,任务Key:{}", context.getJobDetail().getKey());}}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 迭代器模式 Iterator Pattern演示业务层* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 17* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/2 - 7:20* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : BusinessProcessScheduler.java* explain : 学习 类**/package IteratorPatter.scheduler;import IteratorPatter.aggregate.JewelleryProcessAggregate;
import IteratorPatter.core.enums.BusinessLinkType;
import IteratorPatter.core.iterator.IProcessIterator;
import IteratorPatter.entity.BusinessProcessNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.util.concurrent.CompletableFuture;/*** 珠宝业务流程异步调度服务* 使用各类迭代器驱动不同业务链路执行*/
public class BusinessProcessScheduler {private static final Logger log = LoggerFactory.getLogger(BusinessProcessScheduler.class);private final JewelleryProcessAggregate processAggregate;public BusinessProcessScheduler() {this.processAggregate = new JewelleryProcessAggregate();}public BusinessProcessScheduler(JewelleryProcessAggregate processAggregate) {this.processAggregate = processAggregate;}/*** 正向执行全部工序*/public CompletableFuture<Void> runFullAllProcessAsync() {return CompletableFuture.runAsync(() -> {log.info("==========【开始执行全部业务工序正向流程】==========");IProcessIterator iterator = (IProcessIterator) processAggregate.createIterator();while (iterator.hasNext()) {BusinessProcessNode node = iterator.next();log.debug("开始执行工序:{} | 链路:{}", node.getProcessName(), node.getLinkType());node.getExecuteAsync().get().join();}log.info("==========【全部业务工序正向流程执行完毕】==========");});}/*** 执行指定链路过滤流程*/public CompletableFuture<Void> runFilterLinkAsync(BusinessLinkType linkType) {return CompletableFuture.runAsync(() -> {String linkName = linkType == BusinessLinkType.ProductionLink ? "生产主链路" : "职能部门链路";log.info("==========【开始执行{}】==========", linkName);IProcessIterator iterator = processAggregate.createFilterIterator(linkType);if (!iterator.hasNext()) {log.warn("{}未匹配到任何工序", linkName);return;}while (iterator.hasNext()) {BusinessProcessNode node = iterator.next();log.debug("执行工序:{}", node.getProcessName());node.getExecuteAsync().get().join();}log.info("==========【{}执行完成】==========", linkName);});}/*** 反向遍历所有工序(测试)*/public CompletableFuture<Void> runReverseAllProcessAsync() {return CompletableFuture.runAsync(() -> {log.warn("==========【启动工序反向遍历流程(测试)】==========");IProcessIterator iterator = processAggregate.createReverseIterator();while (iterator.hasNext()) {BusinessProcessNode node = iterator.next();log.debug("反向遍历工序:{}", node.getProcessName());node.getExecuteAsync().get().join();}log.info("==========【工序反向遍历流程结束】==========");});}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 迭代器模式 Iterator Pattern演示业务层* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 17* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/2 - 7:17* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : JewelleryProcessAggregate.java* explain : 学习 类**/package IteratorPatter.aggregate;import IteratorPatter.core.enums.BusinessLinkType;
import IteratorPatter.core.iterator.*;
import IteratorPatter.entity.BusinessProcessNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.locks.ReentrantReadWriteLock;/*** 珠宝工序聚合容器(线程安全)* IAggregate实现,维护全部工序数据源* 提供正向、反向、过滤迭代器创建入口*/
public class JewelleryProcessAggregate implements IAggregate<BusinessProcessNode> {private static final Logger log = LoggerFactory.getLogger(JewelleryProcessAggregate.class);/*** 读写分离锁,保障高并发线程安全*/private final ReentrantReadWriteLock rwLock = new ReentrantReadWriteLock();private final List<BusinessProcessNode> processNodes = new ArrayList<>();/*** 构造函数,初始化所有工序*/public JewelleryProcessAggregate() {initNodes();}/*** 初始化所有工序*/public void initNodes() {log.debug("开始加载珠宝全业务工序定义");rwLock.writeLock().lock();try {processNodes.clear();initProductionLink();initDepartmentLink();} finally {rwLock.writeLock().unlock();}log.info("工序初始化完成,总工序数量:{}", processNodes.size());}/*** 初始化生产链路工序*/private void initProductionLink() {BusinessProcessNode node1 = new BusinessProcessNode();node1.setProcessId(1);node1.setProcessName("原料采购核验");node1.setSortOrder(1);node1.setLinkType(BusinessLinkType.ProductionLink);node1.setExecuteAsync(() -> CompletableFuture.runAsync(() ->log.info("【原料采购核验】贵金属、宝石入库检验,单据归档")));processNodes.add(node1);BusinessProcessNode node2 = new BusinessProcessNode();node2.setProcessId(2);node2.setProcessName("设计制图");node2.setSortOrder(2);node2.setLinkType(BusinessLinkType.ProductionLink);node2.setExecuteAsync(() -> CompletableFuture.runAsync(() ->log.info("【设计制图】三维建模、首饰图纸确认")));processNodes.add(node2);BusinessProcessNode node3 = new BusinessProcessNode();node3.setProcessId(3);node3.setProcessName("加工生产");node3.setSortOrder(3);node3.setLinkType(BusinessLinkType.ProductionLink);node3.setExecuteAsync(() -> CompletableFuture.runAsync(() ->log.info("【加工生产】起版、倒模、执模、镶石、抛光")));processNodes.add(node3);BusinessProcessNode node4 = new BusinessProcessNode();node4.setProcessId(4);node4.setProcessName("质量质检");node4.setSortOrder(4);node4.setLinkType(BusinessLinkType.ProductionLink);node4.setExecuteAsync(() -> CompletableFuture.runAsync(() ->log.info("【质量质检】成色检测、外观瑕疵检验、证书出具")));processNodes.add(node4);BusinessProcessNode node5 = new BusinessProcessNode();node5.setProcessId(5);node5.setProcessName("成品包装");node5.setSortOrder(5);node5.setLinkType(BusinessLinkType.ProductionLink);node5.setExecuteAsync(() -> CompletableFuture.runAsync(() ->log.info("【成品包装】首饰封装、礼盒打包、防伪标签粘贴")));processNodes.add(node5);BusinessProcessNode node6 = new BusinessProcessNode();node6.setProcessId(6);node6.setProcessName("物流发货");node6.setSortOrder(6);node6.setLinkType(BusinessLinkType.ProductionLink);node6.setExecuteAsync(() -> CompletableFuture.runAsync(() ->log.info("【物流发货】货品出库、保价托运、物流追踪")));processNodes.add(node6);}/*** 初始化职能部门链路工序*/private void initDepartmentLink() {BusinessProcessNode node7 = new BusinessProcessNode();node7.setProcessId(7);node7.setProcessName("财务核算");node7.setSortOrder(7);node7.setLinkType(BusinessLinkType.DepartmentLink);node7.setExecuteAsync(() -> CompletableFuture.runAsync(() ->log.info("【财务核算】成本核算、应收应付、资金对账")));processNodes.add(node7);BusinessProcessNode node8 = new BusinessProcessNode();node8.setProcessId(8);node8.setProcessName("营销推广");node8.setSortOrder(8);node8.setLinkType(BusinessLinkType.DepartmentLink);node8.setExecuteAsync(() -> CompletableFuture.runAsync(() ->log.info("【营销推广】活动策划、新品宣传投放")));processNodes.add(node8);BusinessProcessNode node9 = new BusinessProcessNode();node9.setProcessId(9);node9.setProcessName("门店业务");node9.setSortOrder(9);node9.setLinkType(BusinessLinkType.DepartmentLink);node9.setExecuteAsync(() -> CompletableFuture.runAsync(() ->log.info("【门店业务】客户洽谈、订单跟进、售后维护")));processNodes.add(node9);BusinessProcessNode node10 = new BusinessProcessNode();node10.setProcessId(10);node10.setProcessName("人事行政");node10.setSortOrder(10);node10.setLinkType(BusinessLinkType.DepartmentLink);node10.setExecuteAsync(() -> CompletableFuture.runAsync(() ->log.info("【人事行政】招聘考勤、行政物资管理")));processNodes.add(node10);BusinessProcessNode node11 = new BusinessProcessNode();node11.setProcessId(11);node11.setProcessName("IT运维");node11.setSortOrder(11);node11.setLinkType(BusinessLinkType.DepartmentLink);node11.setExecuteAsync(() -> CompletableFuture.runAsync(() ->log.info("【IT运维】系统维护、软硬件故障处理")));processNodes.add(node11);BusinessProcessNode node12 = new BusinessProcessNode();node12.setProcessId(12);node12.setProcessName("员工培训");node12.setSortOrder(12);node12.setLinkType(BusinessLinkType.DepartmentLink);node12.setExecuteAsync(() -> CompletableFuture.runAsync(() ->log.info("【员工培训】珠宝工艺、销售专业培训")));processNodes.add(node12);}@Overridepublic IIterator<BusinessProcessNode> createIterator() {rwLock.readLock().lock();try {List<BusinessProcessNode> snapshot = new ArrayList<>(processNodes);return new JewelleryProcessIterator(snapshot);} finally {rwLock.readLock().unlock();}}/*** 创建反向迭代器*/public IProcessIterator createReverseIterator() {rwLock.readLock().lock();try {List<BusinessProcessNode> snapshot = new ArrayList<>(processNodes);return new ReverseProcessIterator(snapshot);} finally {rwLock.readLock().unlock();}}/*** 创建过滤迭代器,按链路筛选*/public IProcessIterator createFilterIterator(BusinessLinkType linkType) {rwLock.readLock().lock();try {List<BusinessProcessNode> snapshot = new ArrayList<>(processNodes);return new FilterProcessIterator(snapshot, linkType);} finally {rwLock.readLock().unlock();}}
}
调用:
/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 迭代器模式 Iterator Pattern演示业务层* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 17* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/7/5 - 11:05* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : IteratorBll.java* explain : 学习 类**/package BLL;import IteratorPatter.core.enums.BusinessLinkType;
import IteratorPatter.scheduler.BusinessProcessScheduler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class IteratorBll {private static final Logger log = LoggerFactory.getLogger(IteratorBll.class);private final BusinessProcessScheduler scheduler;public IteratorBll() {// 手动创建依赖(替代Spring注入)this.scheduler = new BusinessProcessScheduler();}public void demo() {try {run();} catch (Exception e) {log.error("迭代器模式演示异常", e);}}public void run(String... args) throws Exception {// 正向执行全部工序scheduler.runFullAllProcessAsync().join();System.out.println("\r\n========================");// 按生产链路过滤执行scheduler.runFilterLinkAsync(BusinessLinkType.ProductionLink).join();System.out.println("\r\n========================");// 按职能部门链路过滤执行scheduler.runFilterLinkAsync(BusinessLinkType.DepartmentLink).join();System.out.println("\r\n========================");// 反向遍历所有工序scheduler.runReverseAllProcessAsync().join();System.out.println("\r\n迭代器模式演示完成");}
}
输出:

哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)