项目结构:

/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:结构型模式 Structural Patterns 组合模式 Composite 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/17 - 21:56* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : AbstractProcessNode.java* explain : 学习 类**/package CompositePattern.core.composite;import CompositePattern.core.exception.BusinessProcessException;
import org.slf4j.Logger;import java.util.ArrayList;
import java.util.List;/*** 业务叶子节点抽象基类* 封装公共日志、节点名称;默认实现叶子节点不支持子节点操作* 所有12个业务叶子节点继承此类,对齐C# AbstractProcessNode*/
public abstract class AbstractProcessNode implements IBusinessProcessNode {/*** 当前业务节点名称*/private final String nodeName;/*** 节点专属日志实例,DI注入隔离日志分类*/protected final Logger log;/*** 构造函数注入日志与节点名称* @param log 当前类专属日志* @param nodeName 业务节点中文名称*/protected AbstractProcessNode(Logger log, String nodeName) {this.log = log;this.nodeName = nodeName;}@Overridepublic String getNodeName() {return this.nodeName;}/*** 子类重写:实现当前节点专属业务逻辑* @param businessOrderNo 业务单号*/@Overridepublic abstract void execute(String businessOrderNo);/*** 叶子节点默认实现:不支持添加子流程,抛出业务异常*/@Overridepublic void addChild(IBusinessProcessNode childNode) {String errorMsg = String.format("叶子业务节点【%s】不支持挂载子业务流程", nodeName);log.warn(errorMsg);throw new BusinessProcessException(errorMsg, "未知", nodeName);}/*** 叶子节点默认实现:无下属子流程,移除操作抛出异常*/@Overridepublic void removeChild(IBusinessProcessNode childNode) {String errorMsg = String.format("叶子业务节点【%s】无下属子流程,无法移除", nodeName);log.warn(errorMsg);throw new BusinessProcessException(errorMsg, "未知", nodeName);}/*** 叶子节点无任何子节点,返回空集合*/@Overridepublic List<IBusinessProcessNode> getChildren() {return new ArrayList<>();}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:结构型模式 Structural Patterns 组合模式 Composite 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/17 - 21:55* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : IBusinessProcessNode.java* explain : 学习 类**/package CompositePattern.core.composite;import java.util.List;/*** 组合模式顶层抽象构件接口* 所有叶子业务节点、分组组合节点统一实现该接口* 对外提供统一执行、增删子节点标准方法,完全对齐C# IBusinessProcessNode*/
public interface IBusinessProcessNode {/*** 获取当前业务节点中文名称* @return 节点名称*/String getNodeName();/*** 执行业务流程逻辑* @param businessOrderNo 业务唯一订单编号*/void execute(String businessOrderNo);/*** 添加子业务节点* 叶子节点实现抛出不支持异常;组合节点实现挂载子流程* @param childNode 待添加子节点*/void addChild(IBusinessProcessNode childNode);/*** 移除指定子业务节点* @param childNode 待移除子节点*/void removeChild(IBusinessProcessNode childNode);/*** 获取当前节点下全部子节点快照(线程安全副本,避免并发遍历冲突)* @return 子节点集合*/List<IBusinessProcessNode> getChildren();
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:结构型模式 Structural Patterns 组合模式 Composite 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/17 - 21:57* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : ProcessCompositeNode.java* explain : 学习 类**/package CompositePattern.core.composite;import CompositePattern.core.exception.BusinessProcessException;
import org.slf4j.Logger;import java.util.ArrayList;
import java.util.Collections;
import java.util.List;/*** 组合模式容器节点(Composite)* 用于分组管理多个子业务节点(叶子/其他组合节点)* 内部集合操作加同步锁,保证多线程并发增删子节点线程安全,对齐C# ProcessCompositeNode*/
public class ProcessCompositeNode implements IBusinessProcessNode {/*** 分组节点名称*/private final String nodeName;/*** 分组专属日志*/protected final Logger log;/*** 子节点存储集合*/private final List<IBusinessProcessNode> childNodes;/*** 线程安全同步锁对象*/private final Object syncLock;/*** 构造组合分组节点* @param log 分组日志实例* @param groupName 分组中文名称*/public ProcessCompositeNode(Logger log, String groupName) {this.log = log;this.nodeName = groupName;this.childNodes = new ArrayList<>();this.syncLock = new Object();}@Overridepublic String getNodeName() {return this.nodeName;}/*** 批量顺序执行分组下所有子业务流程* 单个子流程异常仅记录日志,不阻断同组其他流程执行* @param businessOrderNo 业务单号*/@Overridepublic void execute(String businessOrderNo) {log.info("===== 开始执行业务分组【{}】,业务单号:{} =====", nodeName, businessOrderNo);List<IBusinessProcessNode> snapshot;synchronized (syncLock) {snapshot = new ArrayList<>(childNodes);}for (IBusinessProcessNode child : snapshot) {try {child.execute(businessOrderNo);} catch (BusinessProcessException busEx) {log.error("分组【{}】子节点【{}】业务异常,单号:{}",nodeName, child.getNodeName(), businessOrderNo, busEx);} catch (Throwable ex) {log.error("分组【{}】子节点【{}】系统未知异常,单号:{}",nodeName, child.getNodeName(), businessOrderNo, ex);}}log.info("===== 业务分组【{}】全部子流程执行完毕,业务单号:{} =====", nodeName, businessOrderNo);}/*** 同步锁保护,线程安全添加子节点* @param childNode 待挂载子流程*/@Overridepublic void addChild(IBusinessProcessNode childNode) {synchronized (syncLock) {childNodes.add(childNode);log.debug("分组【{}】成功挂载子节点:{}", nodeName, childNode.getNodeName());}}/*** 同步锁保护,线程安全移除子节点* @param childNode 待移除子流程*/@Overridepublic void removeChild(IBusinessProcessNode childNode) {synchronized (syncLock) {boolean removeResult = childNodes.remove(childNode);if (removeResult) {log.debug("分组【{}】移除子节点:{}", nodeName, childNode.getNodeName());} else {log.debug("分组【{}】未找到目标子节点【{}】,无需移除", nodeName, childNode.getNodeName());}}}/*** 返回不可修改子节点快照副本,避免外部遍历锁竞争*/@Overridepublic List<IBusinessProcessNode> getChildren() {synchronized (syncLock) {return Collections.unmodifiableList(new ArrayList<>(childNodes));}}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:结构型模式 Structural Patterns 组合模式 Composite 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/17 - 21:54* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : BusinessProcessException.java* explain : 学习 类**/package CompositePattern.core.exception;/*** 珠宝业务流程全局自定义异常* 区分业务校验错误与系统底层异常,日志可单独识别业务单据信息* 对齐C# BusinessProcessException*/
public class BusinessProcessException extends RuntimeException {/*** 关联业务订单号*/private final String businessOrderNo;/*** 异常所属业务节点名称*/private final String processNodeName;/*** 构造基础业务异常* @param message 异常描述信息* @param businessOrderNo 业务单号* @param processNodeName 出错节点名称*/public BusinessProcessException(String message, String businessOrderNo, String processNodeName) {super(message);this.businessOrderNo = businessOrderNo;this.processNodeName = processNodeName;}/*** 带原始堆栈的业务异常构造* @param message 异常描述* @param cause 原始异常对象* @param businessOrderNo 业务单号* @param processNodeName 出错节点名称*/public BusinessProcessException(String message, Throwable cause, String businessOrderNo, String processNodeName) {super(message, cause);this.businessOrderNo = businessOrderNo;this.processNodeName = processNodeName;}public String getBusinessOrderNo() {return businessOrderNo;}public String getProcessNodeName() {return processNodeName;}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:结构型模式 Structural Patterns 组合模式 Composite 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/17 - 22:20* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : AdminSupportComposite.java* explain : 学习 类**/package CompositePattern.business.compositegroup;import CompositePattern.core.composite.ProcessCompositeNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** 业务分组组合节点:职能后台支撑链路* 包含:财务、人事行政、IT、培训后台职能节点*/
public class AdminSupportComposite extends ProcessCompositeNode {private static final Logger log = LoggerFactory.getLogger(AdminSupportComposite.class);public AdminSupportComposite() {super(log, "职能后台支撑链路");}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:结构型模式 Structural Patterns 组合模式 Composite 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/17 - 22:20* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : ProduceLinkComposite.java* explain : 学习 类**/package CompositePattern.business.compositegroup;import CompositePattern.core.composite.ProcessCompositeNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** 业务分组组合节点:生产制造核心链路* 包含:原料采购、设计、加工、质检、包装、物流全生产流程*/
public class ProduceLinkComposite extends ProcessCompositeNode {private static final Logger log = LoggerFactory.getLogger(ProduceLinkComposite.class);public ProduceLinkComposite() {super(log, "生产制造链路");}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:结构型模式 Structural Patterns 组合模式 Composite 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/17 - 22:04* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : SaleLinkComposite.java* explain : 学习 类**/package CompositePattern.business.compositegroup;import CompositePattern.core.composite.ProcessCompositeNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** 业务分组组合节点:前端销售链路* 包含:业务销售、营销推广两个叶子节点*/
public class SaleLinkComposite extends ProcessCompositeNode {private static final Logger log = LoggerFactory.getLogger(SaleLinkComposite.class);public SaleLinkComposite() {super(log, "前端销售链路");}
}
/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:结构型模式 Structural Patterns 组合模式 Composite 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/17 - 22:02* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : BusinessSaleNode.java* explain : 学习 类**/package CompositePattern.business.node;import CompositePattern.core.composite.AbstractProcessNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** 叶子业务节点:业务销售* 业务职责:客户洽谈、定制需求录入、销售订单合同建档*/
public class BusinessSaleNode extends AbstractProcessNode {private static final Logger log = LoggerFactory.getLogger(BusinessSaleNode.class);public BusinessSaleNode() {super(log, "业务");}@Overridepublic void execute(String businessOrderNo) {log.debug("【{}】客户订单建档流程启动,订单号:{}", getNodeName(), businessOrderNo);log.info("【{}】录入客户定制参数、签订销售合同、创建业务订单档案", getNodeName(), businessOrderNo);log.debug("【{}】业务销售流程执行完毕,订单号:{}", getNodeName(), businessOrderNo);}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:结构型模式 Structural Patterns 组合模式 Composite 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/17 - 21:59* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : DesignDrawNode.java* explain : 学习 类**/package CompositePattern.business.node;import CompositePattern.core.composite.AbstractProcessNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** 叶子业务节点:设计制图* 业务职责:首饰3D建模、效果图渲染、生产图纸导出、方案归档*/
public class DesignDrawNode extends AbstractProcessNode {private static final Logger log = LoggerFactory.getLogger(DesignDrawNode.class);public DesignDrawNode() {super(log, "设计制图");}@Overridepublic void execute(String businessOrderNo) {log.debug("【{}】首饰3D建模设计启动,订单号:{}", getNodeName(), businessOrderNo);log.info("【{}】完成款式建模、尺寸标注、客户效果图渲染导出", getNodeName(), businessOrderNo);log.info("【{}】图纸归档至设计资源库,下发至生产车间", getNodeName(), businessOrderNo);log.debug("【{}】设计制图流程执行完毕,订单号:{}", getNodeName(), businessOrderNo);}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:结构型模式 Structural Patterns 组合模式 Composite 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/17 - 22:02* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : FinanceNode.java* explain : 学习 类**/package CompositePattern.business.node;import CompositePattern.core.composite.AbstractProcessNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** 叶子业务节点:财务* 业务职责:订单成本归集、销售开票、应收应付台账记账*/
public class FinanceNode extends AbstractProcessNode {private static final Logger log = LoggerFactory.getLogger(FinanceNode.class);public FinanceNode() {super(log, "财务");}@Overridepublic void execute(String businessOrderNo) {log.debug("【{}】订单成本核算流程启动,订单号:{}", getNodeName(), businessOrderNo);log.info("【{}】归集原料、加工、物流成本,开具销售发票,更新应收台账", getNodeName(), businessOrderNo);log.debug("【{}】财务核算流程执行完毕,订单号:{}", getNodeName(), businessOrderNo);}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:结构型模式 Structural Patterns 组合模式 Composite 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/17 - 22:03* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : HrAdminNode.java* explain : 学习 类**/package CompositePattern.business.node;import CompositePattern.core.composite.AbstractProcessNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** 叶子业务节点:人事行政* 业务职责:车间工序工时统计、生产员工绩效台账更新*/
public class HrAdminNode extends AbstractProcessNode {private static final Logger log = LoggerFactory.getLogger(HrAdminNode.class);public HrAdminNode() {super(log, "人事行政");}@Overridepublic void execute(String businessOrderNo) {log.debug("【{}】订单对应生产人员绩效统计启动,订单号:{}", getNodeName(), businessOrderNo);log.info("【{}】统计各工序工时,更新车间员工绩效台账记录", getNodeName(), businessOrderNo);log.debug("【{}】人事行政流程执行完毕,订单号:{}", getNodeName(), businessOrderNo);}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:结构型模式 Structural Patterns 组合模式 Composite 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/17 - 22:03* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : ItSystemNode.java* explain : 学习 类**/package CompositePattern.business.node;import CompositePattern.core.composite.AbstractProcessNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** 叶子业务节点:IT运维* 业务职责:订单业务数据备份、数据库归档、系统日志巡检*/
public class ItSystemNode extends AbstractProcessNode {private static final Logger log = LoggerFactory.getLogger(ItSystemNode.class);public ItSystemNode() {super(log, "IT");}@Overridepublic void execute(String businessOrderNo) {log.debug("【{}】业务订单数据备份校验启动,订单号:{}", getNodeName(), businessOrderNo);log.info("【{}】完成订单业务数据归档、数据库备份完整性校验", getNodeName(), businessOrderNo);log.debug("【{}】IT运维流程执行完毕,订单号:{}", getNodeName(), businessOrderNo);}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:结构型模式 Structural Patterns 组合模式 Composite 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/17 - 22:01* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : LogisticsNode.java* explain : 学习 类**/package CompositePattern.business.node;import CompositePattern.core.composite.AbstractProcessNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** 叶子业务节点:物流* 业务职责:珠宝保价快递、物流单生成、配送跟踪台账登记*/
public class LogisticsNode extends AbstractProcessNode {private static final Logger log = LoggerFactory.getLogger(LogisticsNode.class);public LogisticsNode() {super(log, "物流");}@Overridepublic void execute(String businessOrderNo) {log.debug("【{}】保价发货流程启动,订单号:{}", getNodeName(), businessOrderNo);log.info("【{}】生成珠宝保价快递单据,录入物流跟踪管理台账", getNodeName(), businessOrderNo);log.debug("【{}】物流流程执行完毕,订单号:{}", getNodeName(), businessOrderNo);}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:结构型模式 Structural Patterns 组合模式 Composite 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/17 - 21:59* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : ManufactureNode.java* explain : 学习 类**/package CompositePattern.business.node;import CompositePattern.core.composite.AbstractProcessNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** 叶子业务节点:加工生产* 业务职责:失蜡铸造、宝石镶嵌、粗抛、精抛车间工序流转*/
public class ManufactureNode extends AbstractProcessNode {private static final Logger log = LoggerFactory.getLogger(ManufactureNode.class);public ManufactureNode() {super(log, "加工生产");}@Overridepublic void execute(String businessOrderNo) {log.debug("【{}】车间生产排产启动,订单号:{}", getNodeName(), businessOrderNo);log.info("【{}】执行铸造、镶嵌、粗抛、精抛全生产工序", getNodeName(), businessOrderNo);log.info("【{}】半成品流转至成品质检工位", getNodeName(), businessOrderNo);log.debug("【{}】加工生产流程执行完毕,订单号:{}", getNodeName(), businessOrderNo);}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:结构型模式 Structural Patterns 组合模式 Composite 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/17 - 22:02* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : MarketingNode.java* explain : 学习 类**/package CompositePattern.business.node;import CompositePattern.core.composite.AbstractProcessNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** 叶子业务节点:营销推广* 业务职责:客户会员积分、用户标签、营销活动数据统计归档*/
public class MarketingNode extends AbstractProcessNode {private static final Logger log = LoggerFactory.getLogger(MarketingNode.class);public MarketingNode() {super(log, "营销推广");}@Overridepublic void execute(String businessOrderNo) {log.debug("【{}】订单客户营销数据归档启动,订单号:{}", getNodeName(), businessOrderNo);log.info("【{}】发放客户会员积分,更新客户用户标签,统计活动转化数据", getNodeName(), businessOrderNo);log.debug("【{}】营销推广流程执行完毕,订单号:{}", getNodeName(), businessOrderNo);}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:结构型模式 Structural Patterns 组合模式 Composite 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/17 - 22:01* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : PackNode.java* explain : 学习 类**/package CompositePattern.business.node;import CompositePattern.core.composite.AbstractProcessNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** 叶子业务节点:包装* 业务职责:礼盒封装、配套证书、防尘防护、防伪封签粘贴*/
public class PackNode extends AbstractProcessNode {private static final Logger log = LoggerFactory.getLogger(PackNode.class);public PackNode() {super(log, "包装");}@Overridepublic void execute(String businessOrderNo) {log.debug("【{}】成品打包作业启动,订单号:{}", getNodeName(), businessOrderNo);log.info("【{}】首饰礼盒封装、配套证书放置、防伪封签粘贴完成", getNodeName(), businessOrderNo);log.debug("【{}】包装流程执行完毕,订单号:{}", getNodeName(), businessOrderNo);}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:结构型模式 Structural Patterns 组合模式 Composite 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/17 - 22:00* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : QualityCheckNode.java* explain : 学习 类**/package CompositePattern.business.node;import CompositePattern.core.composite.AbstractProcessNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** 叶子业务节点:质检* 业务职责:重量、贵金属纯度、镶嵌牢固度、外观瑕疵全项检测*/
public class QualityCheckNode extends AbstractProcessNode {private static final Logger log = LoggerFactory.getLogger(QualityCheckNode.class);public QualityCheckNode() {super(log, "质检");}@Overridepublic void execute(String businessOrderNo) {log.debug("【{}】成品综合检测启动,订单号:{}", getNodeName(), businessOrderNo);log.info("【{}】称重、纯度检测、宝石牢固度、外观瑕疵逐项校验", getNodeName(), businessOrderNo);log.info("【{}】合格品粘贴防伪证书,不良品标记退回车间返工", getNodeName(), businessOrderNo);log.debug("【{}】质检流程执行完毕,订单号:{}", getNodeName(), businessOrderNo);}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:结构型模式 Structural Patterns 组合模式 Composite 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/17 - 21:58* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : RawMaterialPurchaseNode.java* explain : 学习 类**/package CompositePattern.business.node;import CompositePattern.core.composite.AbstractProcessNode;
import CompositePattern.core.exception.BusinessProcessException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** 叶子业务节点:原料采购核验* 业务职责:贵金属/宝石原料入库、资质核验、库存台账登记*/
public class RawMaterialPurchaseNode extends AbstractProcessNode {// 日志由静态工厂创建,Guice DI自动管理单例private static final Logger log = LoggerFactory.getLogger(RawMaterialPurchaseNode.class);public RawMaterialPurchaseNode() {super(log, "原料采购核验");}/*** 执行原料采购核验完整业务流程* @param businessOrderNo 珠宝业务订单编号*/@Overridepublic void execute(String businessOrderNo) {log.debug("【{}】原料入库校验流程启动,订单号:{}", getNodeName(), businessOrderNo);log.info("【{}】核验贵金属纯度报告、宝石鉴定证书、供应商资质文件", getNodeName(), businessOrderNo);// 模拟异常分支:订单后缀带ERR代表原料资质缺失if (businessOrderNo.toUpperCase().endsWith("ERR")) {String errMsg = "原料配套鉴定证书缺失,无法入库,需退回供应商重新提供";log.warn("【{}】业务校验失败:{},订单号:{}", getNodeName(), errMsg, businessOrderNo);throw new BusinessProcessException(errMsg, businessOrderNo, getNodeName());}log.info("【{}】原料入库台账录入完成,原料库存数据同步更新", getNodeName(), businessOrderNo);log.debug("【{}】原料采购核验流程执行完毕,订单号:{}", getNodeName(), businessOrderNo);}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:结构型模式 Structural Patterns 组合模式 Composite 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/17 - 22:04* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : TrainNode.java* explain : 学习 类**/package CompositePattern.business.node;import CompositePattern.core.composite.AbstractProcessNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** 叶子业务节点:员工培训* 业务职责:新款工艺培训台账、质检标准培训记录归档*/
public class TrainNode extends AbstractProcessNode {private static final Logger log = LoggerFactory.getLogger(TrainNode.class);public TrainNode() {super(log, "培训");}@Overridepublic void execute(String businessOrderNo) {log.debug("【{}】新款工艺培训台账归档启动,订单号:{}", getNodeName(), businessOrderNo);log.info("【{}】更新新款首饰工艺、质检标准培训记录台账", getNodeName(), businessOrderNo);log.debug("【{}】员工培训流程执行完毕,订单号:{}", getNodeName(), businessOrderNo);}
}
/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:结构型模式 Structural Patterns 组合模式 Composite 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/17 - 22:21* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : JewelryBusinessScheduler.java* explain : 学习 类**/package CompositePattern.business.scheduler;import CompositePattern.business.compositegroup.AdminSupportComposite;
import CompositePattern.business.compositegroup.ProduceLinkComposite;
import CompositePattern.business.compositegroup.SaleLinkComposite;
import CompositePattern.business.node.*;
import CompositePattern.core.composite.ProcessCompositeNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;public class JewelryBusinessScheduler {private static final Logger log = LoggerFactory.getLogger(JewelryBusinessScheduler.class);private final ProcessCompositeNode rootBusinessComposite;private final BusinessSaleNode saleNode;private final RawMaterialPurchaseNode materialNode;private final DesignDrawNode designNode;private final ManufactureNode manufactureNode;private final QualityCheckNode qualityNode;private final PackNode packNode;private final LogisticsNode logisticsNode;private final FinanceNode financeNode;private final MarketingNode marketingNode;private final HrAdminNode hrNode;private final ItSystemNode itNode;private final TrainNode trainNode;private final SaleLinkComposite saleComposite;private final ProduceLinkComposite produceComposite;private final AdminSupportComposite adminComposite;public JewelryBusinessScheduler() {Logger rootLog = LoggerFactory.getLogger(ProcessCompositeNode.class);this.rootBusinessComposite = new ProcessCompositeNode(rootLog, "珠宝全业务总流程根节点");this.saleNode = new BusinessSaleNode();this.materialNode = new RawMaterialPurchaseNode();this.designNode = new DesignDrawNode();this.manufactureNode = new ManufactureNode();this.qualityNode = new QualityCheckNode();this.packNode = new PackNode();this.logisticsNode = new LogisticsNode();this.financeNode = new FinanceNode();this.marketingNode = new MarketingNode();this.hrNode = new HrAdminNode();this.itNode = new ItSystemNode();this.trainNode = new TrainNode();this.saleComposite = new SaleLinkComposite();this.produceComposite = new ProduceLinkComposite();this.adminComposite = new AdminSupportComposite();}public void initFullBusinessTreeStructure() {log.info("调度器开始初始化珠宝全业务组合树形结构");saleComposite.addChild(saleNode);saleComposite.addChild(marketingNode);produceComposite.addChild(materialNode);produceComposite.addChild(designNode);produceComposite.addChild(manufactureNode);produceComposite.addChild(qualityNode);produceComposite.addChild(packNode);produceComposite.addChild(logisticsNode);adminComposite.addChild(financeNode);adminComposite.addChild(hrNode);adminComposite.addChild(itNode);adminComposite.addChild(trainNode);rootBusinessComposite.addChild(saleComposite);rootBusinessComposite.addChild(produceComposite);rootBusinessComposite.addChild(adminComposite);log.info("珠宝全业务树形组合结构初始化完成");}public void runSingleOrderFullProcess(String orderNo) {log.info("调度器启动单订单完整业务流程,订单号:{}", orderNo);try {rootBusinessComposite.execute(orderNo);log.info("调度器单订单全部业务流程执行完成,订单号:{}", orderNo);} catch (Throwable ex) {log.error("调度器顶层捕获订单全局未知异常,订单号:{}", orderNo, ex);}}public void runMultiThreadBatchProcess(List<String> orderNoList) {if (orderNoList == null || orderNoList.isEmpty()) {log.warn("批量订单集合为空,跳过并发调度");return;}log.info("调度器启动多线程高并发批量业务执行,待处理订单总数:{}", orderNoList.size());ExecutorService executor = Executors.newFixedThreadPool(orderNoList.size());for (String orderCode : orderNoList) {executor.submit(() -> runSingleOrderFullProcess(orderCode));}executor.shutdown();try {if (!executor.awaitTermination(10, TimeUnit.MINUTES)) {log.warn("批量任务执行超时,强制关闭线程池");executor.shutdownNow();}} catch (InterruptedException e) {log.error("批量调度线程被中断", e);Thread.currentThread().interrupt();}log.info("多线程批量全部订单业务流程执行完毕");}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:结构型模式 Structural Patterns 组合模式 Composite 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/17 - 22:22* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : BusinessModule.java* explain : 学习 类**/package CompositePattern.config;
import CompositePattern.business.compositegroup.AdminSupportComposite;
import CompositePattern.business.compositegroup.ProduceLinkComposite;
import CompositePattern.business.compositegroup.SaleLinkComposite;
import CompositePattern.business.node.*;
import CompositePattern.business.scheduler.JewelryBusinessScheduler;
import CompositePattern.core.composite.ProcessCompositeNode;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** Guice DI模块,一次性注册所有业务、组合、调度单例服务* 对齐.NET ServiceCollectionExtensions,统一管理依赖注册*/
public class BusinessModule extends AbstractModule {private static final Logger log = LoggerFactory.getLogger(BusinessModule.class);@Overrideprotected void configure() {// 绑定12个叶子业务节点为单例bind(RawMaterialPurchaseNode.class).asEagerSingleton();bind(DesignDrawNode.class).asEagerSingleton();bind(ManufactureNode.class).asEagerSingleton();bind(QualityCheckNode.class).asEagerSingleton();bind(PackNode.class).asEagerSingleton();bind(LogisticsNode.class).asEagerSingleton();bind(FinanceNode.class).asEagerSingleton();bind(MarketingNode.class).asEagerSingleton();bind(BusinessSaleNode.class).asEagerSingleton();bind(HrAdminNode.class).asEagerSingleton();bind(ItSystemNode.class).asEagerSingleton();bind(TrainNode.class).asEagerSingleton();// 绑定三大业务分组组合节点bind(SaleLinkComposite.class).asEagerSingleton();bind(ProduceLinkComposite.class).asEagerSingleton();bind(AdminSupportComposite.class).asEagerSingleton();// 调度器单例bind(JewelryBusinessScheduler.class).asEagerSingleton();}/*** 提供全局根组合节点单例*/@Providespublic ProcessCompositeNode provideRootCompositeNode() {Logger rootLog = LoggerFactory.getLogger(ProcessCompositeNode.class);return new ProcessCompositeNode(rootLog, "珠宝全业务总流程根节点");}
}
调用:
/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:结构型模式 Structural Patterns 组合模式 Composite 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:02* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : CompositeBll.java* explain : 学习 类**/package BLL;import CompositePattern.business.scheduler.JewelryBusinessScheduler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.util.List;public class CompositeBll {private static final Logger log = LoggerFactory.getLogger(CompositeBll.class);public void demo(){JewelryBusinessScheduler scheduler = new JewelryBusinessScheduler();scheduler.initFullBusinessTreeStructure();log.info("========== 珠宝企业级组合模式业务系统启动完成 ==========");String normalOrder = "JEW20260717001";scheduler.runSingleOrderFullProcess(normalOrder);String errorOrder = "JEW20260717002-ERR";scheduler.runSingleOrderFullProcess(errorOrder);List<String> batchOrderList = List.of("JEW20260717003","JEW20260717004","JEW20260717005","JEW20260717006");scheduler.runMultiThreadBatchProcess(batchOrderList);log.info("========== 全部业务流程测试执行结束,程序退出 ==========");}
}
输出:

