
项目结构实现了一个基于迭代器模式的珠宝业务管理系统主要包含以下核心内容系统架构设计采用迭代器模式分离数据存储与遍历逻辑实现正向、反向、过滤三种迭代器类型支持生产链路原料采购到物流发货6个工序和职能部门链路财务核算到员工培训6个工序关键技术实现线程安全的工序聚合容器JewelleryProcessAggregate异步任务执行与自动重试机制RetryHelperQuartz定时任务集成读写锁保障高并发安全业务功能全流程正向/反向遍历按业务链路类型筛选执行每个工序支持异步处理与日志记录设计优势迭代器接口统一了不同遍历方式新增迭代器类型不影响现有代码线程安全设计支持高并发场景完整演示了迭代器模式在业务流程管理中的应用通过不同的迭代器实现灵活的业务流程控制。/** * 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 SupplierCompletableFutureVoid 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 SupplierCompletableFutureVoid getExecuteAsync() { return executeAsync; } public void setExecuteAsync(SupplierCompletableFutureVoid 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 ListBusinessProcessNode filteredNodes; private int currentIndex; public FilterProcessIterator(ListBusinessProcessNode 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; } Override public boolean hasNext() { return currentIndex filteredNodes.size(); } Override public BusinessProcessNode next() { if (!hasNext()) { throw new IllegalStateException(过滤迭代器已遍历完毕); } BusinessProcessNode node filteredNodes.get(currentIndex); currentIndex; return node; } Override public 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 IAggregateT { /** * 创建标准正向迭代器 * return 迭代器实例 */ IIteratorT 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 IIteratorT { /** * 判断是否存在下一个元素 * 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 IIteratorBusinessProcessNode { } /** * 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 ListBusinessProcessNode sourceNodes; private int currentIndex; public JewelleryProcessIterator(ListBusinessProcessNode sourceNodes) { this.sourceNodes sourceNodes; this.currentIndex 0; } Override public boolean hasNext() { return currentIndex sourceNodes.size(); } Override public BusinessProcessNode next() { if (!hasNext()) { throw new IllegalStateException(迭代器已到达集合末尾无更多元素); } BusinessProcessNode node sourceNodes.get(currentIndex); currentIndex; return node; } Override public 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 ListBusinessProcessNode sourceNodes; private int currentIndex; public ReverseProcessIterator(ListBusinessProcessNode sourceNodes) { this.sourceNodes sourceNodes; this.currentIndex sourceNodes.size() - 1; } Override public boolean hasNext() { return currentIndex 0; } Override public BusinessProcessNode next() { if (!hasNext()) { throw new IllegalStateException(反向迭代器遍历完成不存在下一项); } BusinessProcessNode node sourceNodes.get(currentIndex); currentIndex--; return node; } Override public 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 CompletableFutureBoolean executeWithRetryAsync( SupplierCompletableFutureVoid action, int maxRetryTimes, long delayMs, SetClass? extends Exception skipExceptionSet) { int[] currentTimesWrapper {0}; return attempt(action, maxRetryTimes, delayMs, currentTimesWrapper, skipExceptionSet); } /** * 递归重试核心方法 */ private CompletableFutureBoolean attempt( SupplierCompletableFutureVoid action, int maxRetry, long delayMs, int[] timesWrapper, SetClass? 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); Override public 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; } CompletableFutureBoolean 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 CompletableFutureVoid 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 CompletableFutureVoid 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 CompletableFutureVoid 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 IAggregateBusinessProcessNode { private static final Logger log LoggerFactory.getLogger(JewelleryProcessAggregate.class); /** * 读写分离锁保障高并发线程安全 */ private final ReentrantReadWriteLock rwLock new ReentrantReadWriteLock(); private final ListBusinessProcessNode 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); } Override public IIteratorBusinessProcessNode createIterator() { rwLock.readLock().lock(); try { ListBusinessProcessNode snapshot new ArrayList(processNodes); return new JewelleryProcessIterator(snapshot); } finally { rwLock.readLock().unlock(); } } /** * 创建反向迭代器 */ public IProcessIterator createReverseIterator() { rwLock.readLock().lock(); try { ListBusinessProcessNode snapshot new ArrayList(processNodes); return new ReverseProcessIterator(snapshot); } finally { rwLock.readLock().unlock(); } } /** * 创建过滤迭代器按链路筛选 */ public IProcessIterator createFilterIterator(BusinessLinkType linkType) { rwLock.readLock().lock(); try { ListBusinessProcessNode 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迭代器模式演示完成); } }输出