java: Iterator Pattern
2026/8/3 23:40:39 网站建设 项目流程

项目结构:

实现了一个基于迭代器模式的珠宝业务管理系统,主要包含以下核心内容:

  1. 系统架构设计
  • 采用迭代器模式分离数据存储与遍历逻辑
  • 实现正向、反向、过滤三种迭代器类型
  • 支持生产链路(原料采购到物流发货6个工序)和职能部门链路(财务核算到员工培训6个工序)
  1. 关键技术实现
  • 线程安全的工序聚合容器(JewelleryProcessAggregate)
  • 异步任务执行与自动重试机制(RetryHelper)
  • Quartz定时任务集成
  • 读写锁保障高并发安全
  1. 业务功能
  • 全流程正向/反向遍历
  • 按业务链路类型筛选执行
  • 每个工序支持异步处理与日志记录
  1. 设计优势
  • 迭代器接口统一了不同遍历方式
  • 新增迭代器类型不影响现有代码
  • 线程安全设计支持高并发场景

完整演示了迭代器模式在业务流程管理中的应用,通过不同的迭代器实现灵活的业务流程控制。

/** * 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; } @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 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; } @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 List<BusinessProcessNode> sourceNodes; private int currentIndex; public ReverseProcessIterator(List<BusinessProcessNode> 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 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); @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; } 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); } @Override public 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迭代器模式演示完成"); } }

输出:

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询