项目结构:

java
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:32
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : LogScopeHelper.java
* explain : 学习 类
**/
package FactoryMethodPattern.infrastructure.logging;
import org.slf4j.MDC;
public class LogScopeHelper implements AutoCloseable {
private LogScopeHelper() {}
public static LogScopeHelper createBusinessScope(String traceId, String module) {
MDC.put("TraceId", traceId);
MDC.put("Module", module);
return new LogScopeHelper();
}
@Override
public void close() {
MDC.remove("TraceId");
MDC.remove("Module");
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:32
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : LoggerFactoryUtil.java
* explain : 学习 类
**/
package FactoryMethodPattern.infrastructure.logging;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LoggerFactoryUtil {
public static <T> Logger getLogger(Class<T> clazz) {
return LoggerFactory.getLogger(clazz);
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:32
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : ProcessConcurrentScheduler.java
* explain : 学习 类
**/
package FactoryMethodPattern.infrastructure.concurrency;
import FactoryMethodPattern.core.abstractions.IJewelryBusinessProcess;
import FactoryMethodPattern.core.abstractions.JewelryBusinessFactory;
import FactoryMethodPattern.core.exceptions.BusinessProcessException;
import FactoryMethodPattern.core.models.ProcessContext;
import FactoryMethodPattern.core.threadsafe.ConcurrentLockHelper;
import FactoryMethodPattern.infrastructure.logging.LoggerFactoryUtil;
import FactoryMethodPattern.infrastructure.logging.LogScopeHelper;
import org.slf4j.Logger;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class ProcessConcurrentScheduler {
private final ConcurrentLinkedQueue<JewelryBusinessFactory> factoryPool = new ConcurrentLinkedQueue<>();
private final int maxParallel;
private final ExecutorService executor;
private final Logger log = LoggerFactoryUtil.getLogger(ProcessConcurrentScheduler.class);
public ProcessConcurrentScheduler(int maxParallel) {
this.maxParallel = maxParallel;
this.executor = Executors.newFixedThreadPool(maxParallel);
}
public void registerFactory(JewelryBusinessFactory factory) {
ConcurrentLockHelper.writeLock(() -> factoryPool.add(factory));
log.info("注册业务工厂:{}", factory.getClass().getSimpleName());
}
public void runAllSync(ProcessContext globalCtx) {
try (LogScopeHelper scope = LogScopeHelper.createBusinessScope(globalCtx.getTraceId().toString(), "调度器同步执行")) {
log.info("开始同步批量执行全部业务流程,最大并发数:{}", maxParallel);
List<Runnable> tasks = new ArrayList<>();
for (JewelryBusinessFactory factory : factoryPool) {
tasks.add(() -> {
try {
IJewelryBusinessProcess process = factory.createProcess();
process.execute(globalCtx);
} catch (BusinessProcessException ex) {
log.error("业务流程异常:{}", ex.getProcessName(), ex);
} catch (Exception ex) {
log.error("全局未知同步异常", ex);
}
});
}
tasks.parallelStream().forEach(Runnable::run);
log.info("同步批量业务流程执行完毕");
}
}
public CompletableFuture<Void> runAllAsync(ProcessContext globalCtx) {
try (LogScopeHelper scope = LogScopeHelper.createBusinessScope(globalCtx.getTraceId().toString(), "调度器异步执行")) {
log.info("开始异步批量执行全部业务流程");
List<CompletableFuture<Void>> futures = new ArrayList<>();
for (JewelryBusinessFactory factory : factoryPool) {
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
try {
IJewelryBusinessProcess process = factory.createProcess();
process.executeAsync(globalCtx).join();
} catch (BusinessProcessException ex) {
log.error("异步业务流程异常:{}", ex.getProcessName(), ex);
} catch (Exception ex) {
log.error("全局未知异步异常", ex);
}
}, executor);
futures.add(future);
}
return CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]))
.thenRun(() -> log.info("异步批量业务流程执行完毕"));
}
}
public void shutdown() throws InterruptedException {
executor.shutdown();
executor.awaitTermination(5, TimeUnit.SECONDS);
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:29
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : ConcurrentLockHelper.java
* explain : 学习 类
**/
package FactoryMethodPattern.core.threadsafe;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class ConcurrentLockHelper {
private static final ReentrantReadWriteLock GLOBAL_RW_LOCK = new ReentrantReadWriteLock(true);
private static final ReentrantReadWriteLock.ReadLock READ_LOCK = GLOBAL_RW_LOCK.readLock();
private static final ReentrantReadWriteLock.WriteLock WRITE_LOCK = GLOBAL_RW_LOCK.writeLock();
public static void readLock(Runnable action) {
READ_LOCK.lock();
try {
action.run();
} finally {
READ_LOCK.unlock();
}
}
public static void writeLock(Runnable action) {
WRITE_LOCK.lock();
try {
action.run();
} finally {
WRITE_LOCK.unlock();
}
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:24
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : ProcessContext.java
* explain : 学习 类
**/
package FactoryMethodPattern.core.models;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class ProcessContext {
private final UUID traceId;
private final LocalDateTime startTime;
private final Map<String, Object> dataBag;
private boolean transactionRequired;
public ProcessContext() {
this.traceId = UUID.randomUUID();
this.startTime = LocalDateTime.now();
this.dataBag = new HashMap<>();
}
public UUID getTraceId() {
return traceId;
}
public LocalDateTime getStartTime() {
return startTime;
}
public Map<String, Object> getDataBag() {
return dataBag;
}
public boolean isTransactionRequired() {
return transactionRequired;
}
public void setTransactionRequired(boolean transactionRequired) {
this.transactionRequired = transactionRequired;
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:24
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : BusinessProcessException.java
* explain : 学习 类
**/
package FactoryMethodPattern.core.exceptions;
public class BusinessProcessException extends RuntimeException {
private final String processName;
public BusinessProcessException(String processName, String message) {
super(message);
this.processName = processName;
}
public BusinessProcessException(String processName, String message, Throwable cause) {
super(message, cause);
this.processName = processName;
}
public String getProcessName() {
return processName;
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:31
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : JewelryBusinessFactory.java
* explain : 学习 类
**/
package FactoryMethodPattern.core.abstractions;
public abstract class JewelryBusinessFactory {
private final Object singletonLock = new Object();
private IJewelryBusinessProcess cachedProcess;
public IJewelryBusinessProcess createProcess() {
if (cachedProcess != null) {
return cachedProcess;
}
synchronized (singletonLock) {
if (cachedProcess == null) {
cachedProcess = createConcreteProcess();
}
}
return cachedProcess;
}
protected abstract IJewelryBusinessProcess createConcreteProcess();
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:30
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : IJewelryBusinessProcess.java
* explain : 学习 类
**/
package FactoryMethodPattern.core.abstractions;
import java.util.concurrent.CompletableFuture;
import FactoryMethodPattern.core.models.*;
public interface IJewelryBusinessProcess {
String getProcessName();
void execute(ProcessContext context);
CompletableFuture<Void> executeAsync(ProcessContext context);
}
java
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:45
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : BusinessProcess.java
* explain : 学习 类
**/
package FactoryMethodPattern.businessmodule.processes;
import FactoryMethodPattern.core.abstractions.IJewelryBusinessProcess;
import FactoryMethodPattern.core.models.ProcessContext;
import FactoryMethodPattern.core.threadsafe.ConcurrentLockHelper;
import FactoryMethodPattern.infrastructure.logging.LoggerFactoryUtil;
import FactoryMethodPattern.infrastructure.logging.LogScopeHelper;
import org.slf4j.Logger;
import java.util.concurrent.CompletableFuture;
public class BusinessProcess implements IJewelryBusinessProcess {
private final Logger log = LoggerFactoryUtil.getLogger(BusinessProcess.class);
@Override
public String getProcessName() {
return "业务";
}
@Override
public void execute(ProcessContext context) {
ConcurrentLockHelper.readLock(() -> {
try (LogScopeHelper scope = LogScopeHelper.createBusinessScope(context.getTraceId().toString(), getProcessName())) {
log.info("客户对接、订单洽谈、合同签订、售后跟进");
}
});
}
@Override
public CompletableFuture<Void> executeAsync(ProcessContext context) {
return CompletableFuture.runAsync(() -> execute(context));
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:37
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : DesignDrawingProcess.java
* explain : 学习 类
**/
package FactoryMethodPattern.businessmodule.processes;
import FactoryMethodPattern.core.abstractions.IJewelryBusinessProcess;
import FactoryMethodPattern.core.models.ProcessContext;
import FactoryMethodPattern.core.threadsafe.ConcurrentLockHelper;
import FactoryMethodPattern.infrastructure.logging.LoggerFactoryUtil;
import FactoryMethodPattern.infrastructure.logging.LogScopeHelper;
import org.slf4j.Logger;
import java.util.concurrent.CompletableFuture;
public class DesignDrawingProcess implements IJewelryBusinessProcess {
private final Logger log = LoggerFactoryUtil.getLogger(DesignDrawingProcess.class);
@Override
public String getProcessName() {
return "设计制图";
}
@Override
public void execute(ProcessContext context) {
ConcurrentLockHelper.readLock(() -> {
try (LogScopeHelper scope = LogScopeHelper.createBusinessScope(context.getTraceId().toString(), getProcessName())) {
log.info("3D建模、款式设计、图纸审核、客户确认");
}
});
}
@Override
public CompletableFuture<Void> executeAsync(ProcessContext context) {
return CompletableFuture.runAsync(() -> execute(context));
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:42
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : FinanceProcess.java
* explain : 学习 类
**/
package FactoryMethodPattern.businessmodule.processes;
import FactoryMethodPattern.core.abstractions.IJewelryBusinessProcess;
import FactoryMethodPattern.core.models.ProcessContext;
import FactoryMethodPattern.core.threadsafe.ConcurrentLockHelper;
import FactoryMethodPattern.infrastructure.logging.LoggerFactoryUtil;
import FactoryMethodPattern.infrastructure.logging.LogScopeHelper;
import org.slf4j.Logger;
import java.util.concurrent.CompletableFuture;
public class FinanceProcess implements IJewelryBusinessProcess {
private final Logger log = LoggerFactoryUtil.getLogger(FinanceProcess.class);
@Override
public String getProcessName() {
return "财务";
}
@Override
public void execute(ProcessContext context) {
ConcurrentLockHelper.readLock(() -> {
try (LogScopeHelper scope = LogScopeHelper.createBusinessScope(context.getTraceId().toString(), getProcessName())) {
log.info("成本核算、应收应付、开票、工资结算、报表生成");
}
});
}
@Override
public CompletableFuture<Void> executeAsync(ProcessContext context) {
return CompletableFuture.runAsync(() -> execute(context));
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:46
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : HRAdminProcess.java
* explain : 学习 类
**/
package FactoryMethodPattern.businessmodule.processes;
import FactoryMethodPattern.core.abstractions.IJewelryBusinessProcess;
import FactoryMethodPattern.core.models.ProcessContext;
import FactoryMethodPattern.core.threadsafe.ConcurrentLockHelper;
import FactoryMethodPattern.infrastructure.logging.LoggerFactoryUtil;
import FactoryMethodPattern.infrastructure.logging.LogScopeHelper;
import org.slf4j.Logger;
import java.util.concurrent.CompletableFuture;
public class HRAdminProcess implements IJewelryBusinessProcess {
private final Logger log = LoggerFactoryUtil.getLogger(HRAdminProcess.class);
@Override
public String getProcessName() {
return "人事行政";
}
@Override
public void execute(ProcessContext context) {
ConcurrentLockHelper.readLock(() -> {
try (LogScopeHelper scope = LogScopeHelper.createBusinessScope(context.getTraceId().toString(), getProcessName())) {
log.info("招聘、考勤、社保、办公用品管理、制度执行");
}
});
}
@Override
public CompletableFuture<Void> executeAsync(ProcessContext context) {
return CompletableFuture.runAsync(() -> execute(context));
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:47
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : ITProcess.java
* explain : 学习 类
**/
package FactoryMethodPattern.businessmodule.processes;
import FactoryMethodPattern.core.abstractions.IJewelryBusinessProcess;
import FactoryMethodPattern.core.models.ProcessContext;
import FactoryMethodPattern.core.threadsafe.ConcurrentLockHelper;
import FactoryMethodPattern.infrastructure.logging.LoggerFactoryUtil;
import FactoryMethodPattern.infrastructure.logging.LogScopeHelper;
import org.slf4j.Logger;
import java.util.concurrent.CompletableFuture;
public class ITProcess implements IJewelryBusinessProcess {
private final Logger log = LoggerFactoryUtil.getLogger(ITProcess.class);
@Override
public String getProcessName() {
return "IT";
}
@Override
public void execute(ProcessContext context) {
ConcurrentLockHelper.readLock(() -> {
try (LogScopeHelper scope = LogScopeHelper.createBusinessScope(context.getTraceId().toString(), getProcessName())) {
log.info("系统维护、数据备份、网络安全、软件更新、设备检修");
}
});
}
@Override
public CompletableFuture<Void> executeAsync(ProcessContext context) {
return CompletableFuture.runAsync(() -> execute(context));
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:41
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : LogisticsProcess.java
* explain : 学习 类
**/
package FactoryMethodPattern.businessmodule.processes;
import FactoryMethodPattern.core.abstractions.IJewelryBusinessProcess;
import FactoryMethodPattern.core.models.ProcessContext;
import FactoryMethodPattern.core.threadsafe.ConcurrentLockHelper;
import FactoryMethodPattern.infrastructure.logging.LoggerFactoryUtil;
import FactoryMethodPattern.infrastructure.logging.LogScopeHelper;
import org.slf4j.Logger;
import java.util.concurrent.CompletableFuture;
public class LogisticsProcess implements IJewelryBusinessProcess {
private final Logger log = LoggerFactoryUtil.getLogger(LogisticsProcess.class);
@Override
public String getProcessName() {
return "物流";
}
@Override
public void execute(ProcessContext context) {
ConcurrentLockHelper.readLock(() -> {
try (LogScopeHelper scope = LogScopeHelper.createBusinessScope(context.getTraceId().toString(), getProcessName())) {
log.info("订单打包、保价发货、轨迹跟踪、签收确认");
}
});
}
@Override
public CompletableFuture<Void> executeAsync(ProcessContext context) {
return CompletableFuture.runAsync(() -> execute(context));
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:43
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : MarketingProcess.java
* explain : 学习 类
**/
package FactoryMethodPattern.businessmodule.processes;
import FactoryMethodPattern.core.abstractions.IJewelryBusinessProcess;
import FactoryMethodPattern.core.models.ProcessContext;
import FactoryMethodPattern.core.threadsafe.ConcurrentLockHelper;
import FactoryMethodPattern.infrastructure.logging.LoggerFactoryUtil;
import FactoryMethodPattern.infrastructure.logging.LogScopeHelper;
import org.slf4j.Logger;
import java.util.concurrent.CompletableFuture;
public class MarketingProcess implements IJewelryBusinessProcess {
private final Logger log = LoggerFactoryUtil.getLogger(MarketingProcess.class);
@Override
public String getProcessName() {
return "营销推广";
}
@Override
public void execute(ProcessContext context) {
ConcurrentLockHelper.readLock(() -> {
try (LogScopeHelper scope = LogScopeHelper.createBusinessScope(context.getTraceId().toString(), getProcessName())) {
log.info("线上直播、短视频运营、门店活动、品牌宣传");
}
});
}
@Override
public CompletableFuture<Void> executeAsync(ProcessContext context) {
return CompletableFuture.runAsync(() -> execute(context));
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:40
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : PackagingProcess.java
* explain : 学习 类
**/
package FactoryMethodPattern.businessmodule.processes;
import FactoryMethodPattern.core.abstractions.IJewelryBusinessProcess;
import FactoryMethodPattern.core.models.ProcessContext;
import FactoryMethodPattern.core.threadsafe.ConcurrentLockHelper;
import FactoryMethodPattern.infrastructure.logging.LoggerFactoryUtil;
import FactoryMethodPattern.infrastructure.logging.LogScopeHelper;
import org.slf4j.Logger;
import java.util.concurrent.CompletableFuture;
public class PackagingProcess implements IJewelryBusinessProcess {
private final Logger log = LoggerFactoryUtil.getLogger(PackagingProcess.class);
@Override
public String getProcessName() {
return "包装";
}
@Override
public void execute(ProcessContext context) {
ConcurrentLockHelper.readLock(() -> {
try (LogScopeHelper scope = LogScopeHelper.createBusinessScope(context.getTraceId().toString(), getProcessName())) {
log.info("礼盒包装、证书装订、防伪标签粘贴");
}
});
}
@Override
public CompletableFuture<Void> executeAsync(ProcessContext context) {
return CompletableFuture.runAsync(() -> execute(context));
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:38
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : ProductionProcess.java
* explain : 学习 类
**/
package FactoryMethodPattern.businessmodule.processes;
import FactoryMethodPattern.core.abstractions.IJewelryBusinessProcess;
import FactoryMethodPattern.core.models.ProcessContext;
import FactoryMethodPattern.core.threadsafe.ConcurrentLockHelper;
import FactoryMethodPattern.infrastructure.logging.LoggerFactoryUtil;
import FactoryMethodPattern.infrastructure.logging.LogScopeHelper;
import org.slf4j.Logger;
import java.util.concurrent.CompletableFuture;
public class ProductionProcess implements IJewelryBusinessProcess {
private final Logger log = LoggerFactoryUtil.getLogger(ProductionProcess.class);
@Override
public String getProcessName() {
return "加工生产";
}
@Override
public void execute(ProcessContext context) {
ConcurrentLockHelper.readLock(() -> {
try (LogScopeHelper scope = LogScopeHelper.createBusinessScope(context.getTraceId().toString(), getProcessName())) {
log.info("失蜡铸造、宝石镶嵌、抛光、打磨");
}
});
}
@Override
public CompletableFuture<Void> executeAsync(ProcessContext context) {
return CompletableFuture.runAsync(() -> execute(context));
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:39
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : QualityInspectionProcess.java
* explain : 学习 类
**/
package FactoryMethodPattern.businessmodule.processes;
import FactoryMethodPattern.core.abstractions.IJewelryBusinessProcess;
import FactoryMethodPattern.core.models.ProcessContext;
import FactoryMethodPattern.core.threadsafe.ConcurrentLockHelper;
import FactoryMethodPattern.infrastructure.logging.LoggerFactoryUtil;
import FactoryMethodPattern.infrastructure.logging.LogScopeHelper;
import org.slf4j.Logger;
import java.util.concurrent.CompletableFuture;
public class QualityInspectionProcess implements IJewelryBusinessProcess {
private final Logger log = LoggerFactoryUtil.getLogger(QualityInspectionProcess.class);
@Override
public String getProcessName() {
return "质检";
}
@Override
public void execute(ProcessContext context) {
ConcurrentLockHelper.readLock(() -> {
try (LogScopeHelper scope = LogScopeHelper.createBusinessScope(context.getTraceId().toString(), getProcessName())) {
log.info("工艺检查、纯度复检、尺寸校验、合格判定");
}
});
}
@Override
public CompletableFuture<Void> executeAsync(ProcessContext context) {
return CompletableFuture.runAsync(() -> execute(context));
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:35
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : RawMaterialPurchaseProcess.java
* explain : 学习 类
**/
package FactoryMethodPattern.businessmodule.processes;
import FactoryMethodPattern.core.abstractions.IJewelryBusinessProcess;
import FactoryMethodPattern.core.exceptions.BusinessProcessException;
import FactoryMethodPattern.core.models.ProcessContext;
import FactoryMethodPattern.core.threadsafe.ConcurrentLockHelper;
import FactoryMethodPattern.infrastructure.logging.LoggerFactoryUtil;
import FactoryMethodPattern.infrastructure.logging.LogScopeHelper;
import org.slf4j.Logger;
import java.math.BigDecimal;
import java.util.concurrent.CompletableFuture;
public class RawMaterialPurchaseProcess implements IJewelryBusinessProcess {
private final Logger log = LoggerFactoryUtil.getLogger(RawMaterialPurchaseProcess.class);
@Override
public String getProcessName() {
return "原料采购核验";
}
@Override
public void execute(ProcessContext context) {
ConcurrentLockHelper.readLock(() -> {
try (LogScopeHelper scope = LogScopeHelper.createBusinessScope(context.getTraceId().toString(), getProcessName())) {
log.info("金/银/宝石验收、纯度检测、入库登记");
Object weightObj = context.getDataBag().get("MaterialWeight");
if (weightObj != null) {
BigDecimal weight = new BigDecimal(weightObj.toString());
if (weight.compareTo(BigDecimal.ZERO) <= 0) {
throw new BusinessProcessException(getProcessName(), "原料重量不能小于等于0,当前重量:" + weight);
}
}
}
});
}
@Override
public CompletableFuture<Void> executeAsync(ProcessContext context) {
return CompletableFuture.runAsync(() -> execute(context));
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:48
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : TrainingProcess.java
* explain : 学习 类
**/
package FactoryMethodPattern.businessmodule.processes;
import FactoryMethodPattern.core.abstractions.IJewelryBusinessProcess;
import FactoryMethodPattern.core.models.ProcessContext;
import FactoryMethodPattern.core.threadsafe.ConcurrentLockHelper;
import FactoryMethodPattern.infrastructure.logging.LoggerFactoryUtil;
import FactoryMethodPattern.infrastructure.logging.LogScopeHelper;
import org.slf4j.Logger;
import java.util.concurrent.CompletableFuture;
public class TrainingProcess implements IJewelryBusinessProcess {
private final Logger log = LoggerFactoryUtil.getLogger(TrainingProcess.class);
@Override
public String getProcessName() {
return "培训";
}
@Override
public void execute(ProcessContext context) {
ConcurrentLockHelper.readLock(() -> {
try (LogScopeHelper scope = LogScopeHelper.createBusinessScope(context.getTraceId().toString(), getProcessName())) {
log.info("新品知识、销售技巧、工艺标准、企业文化培训");
}
});
}
@Override
public CompletableFuture<Void> executeAsync(ProcessContext context) {
return CompletableFuture.runAsync(() -> execute(context));
}
}
java
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:51
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : BusinessFactory.java
* explain : 学习 类
**/
package FactoryMethodPattern.businessmodule.factories;
import FactoryMethodPattern.businessmodule.processes.BusinessProcess;
import FactoryMethodPattern.core.abstractions.IJewelryBusinessProcess;
import FactoryMethodPattern.core.abstractions.JewelryBusinessFactory;
public class BusinessFactory extends JewelryBusinessFactory {
@Override
protected IJewelryBusinessProcess createConcreteProcess() {
return new BusinessProcess();
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:49
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : DesignDrawingFactory.java
* explain : 学习 类
**/
package FactoryMethodPattern.businessmodule.factories;
import FactoryMethodPattern.businessmodule.processes.DesignDrawingProcess;
import FactoryMethodPattern.core.abstractions.IJewelryBusinessProcess;
import FactoryMethodPattern.core.abstractions.JewelryBusinessFactory;
public class DesignDrawingFactory extends JewelryBusinessFactory {
@Override
protected IJewelryBusinessProcess createConcreteProcess() {
return new DesignDrawingProcess();
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:50
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : FinanceFactory.java
* explain : 学习 类
**/
package FactoryMethodPattern.businessmodule.factories;
import FactoryMethodPattern.businessmodule.processes.FinanceProcess;
import FactoryMethodPattern.core.abstractions.IJewelryBusinessProcess;
import FactoryMethodPattern.core.abstractions.JewelryBusinessFactory;
public class FinanceFactory extends JewelryBusinessFactory {
@Override
protected IJewelryBusinessProcess createConcreteProcess() {
return new FinanceProcess();
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:52
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : HRAdminFactory.java
* explain : 学习 类
**/
package FactoryMethodPattern.businessmodule.factories;
import FactoryMethodPattern.businessmodule.processes.HRAdminProcess;
import FactoryMethodPattern.core.abstractions.IJewelryBusinessProcess;
import FactoryMethodPattern.core.abstractions.JewelryBusinessFactory;
public class HRAdminFactory extends JewelryBusinessFactory {
@Override
protected IJewelryBusinessProcess createConcreteProcess() {
return new HRAdminProcess();
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:52
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : ITFactory.java
* explain : 学习 类
**/
package FactoryMethodPattern.businessmodule.factories;
import FactoryMethodPattern.businessmodule.processes.ITProcess;
import FactoryMethodPattern.core.abstractions.IJewelryBusinessProcess;
import FactoryMethodPattern.core.abstractions.JewelryBusinessFactory;
public class ITFactory extends JewelryBusinessFactory {
@Override
protected IJewelryBusinessProcess createConcreteProcess() {
return new ITProcess();
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:51
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : LogisticsFactory.java
* explain : 学习 类
**/
package FactoryMethodPattern.businessmodule.factories;
import FactoryMethodPattern.businessmodule.processes.LogisticsProcess;
import FactoryMethodPattern.core.abstractions.IJewelryBusinessProcess;
import FactoryMethodPattern.core.abstractions.JewelryBusinessFactory;
public class LogisticsFactory extends JewelryBusinessFactory {
@Override
protected IJewelryBusinessProcess createConcreteProcess() {
return new LogisticsProcess();
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:51
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : MarketingFactory.java
* explain : 学习 类
**/
package FactoryMethodPattern.businessmodule.factories;
import FactoryMethodPattern.businessmodule.processes.MarketingProcess;
import FactoryMethodPattern.core.abstractions.IJewelryBusinessProcess;
import FactoryMethodPattern.core.abstractions.JewelryBusinessFactory;
public class MarketingFactory extends JewelryBusinessFactory {
@Override
protected IJewelryBusinessProcess createConcreteProcess() {
return new MarketingProcess();
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:50
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : PackagingFactory.java
* explain : 学习 类
**/
package FactoryMethodPattern.businessmodule.factories;
import FactoryMethodPattern.businessmodule.processes.PackagingProcess;
import FactoryMethodPattern.core.abstractions.IJewelryBusinessProcess;
import FactoryMethodPattern.core.abstractions.JewelryBusinessFactory;
public class PackagingFactory extends JewelryBusinessFactory {
@Override
protected IJewelryBusinessProcess createConcreteProcess() {
return new PackagingProcess();
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:49
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : ProductionFactory.java
* explain : 学习 类
**/
package FactoryMethodPattern.businessmodule.factories;
import FactoryMethodPattern.businessmodule.processes.ProductionProcess;
import FactoryMethodPattern.core.abstractions.IJewelryBusinessProcess;
import FactoryMethodPattern.core.abstractions.JewelryBusinessFactory;
public class ProductionFactory extends JewelryBusinessFactory {
@Override
protected IJewelryBusinessProcess createConcreteProcess() {
return new ProductionProcess();
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:50
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : QualityInspectionFactory.java
* explain : 学习 类
**/
package FactoryMethodPattern.businessmodule.factories;
import FactoryMethodPattern.businessmodule.processes.QualityInspectionProcess;
import FactoryMethodPattern.core.abstractions.IJewelryBusinessProcess;
import FactoryMethodPattern.core.abstractions.JewelryBusinessFactory;
public class QualityInspectionFactory extends JewelryBusinessFactory {
@Override
protected IJewelryBusinessProcess createConcreteProcess() {
return new QualityInspectionProcess();
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:48
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : RawMaterialPurchaseFactory.java
* explain : 学习 类
**/
package FactoryMethodPattern.businessmodule.factories;
import FactoryMethodPattern.businessmodule.processes.RawMaterialPurchaseProcess;
import FactoryMethodPattern.core.abstractions.IJewelryBusinessProcess;
import FactoryMethodPattern.core.abstractions.JewelryBusinessFactory;
public class RawMaterialPurchaseFactory extends JewelryBusinessFactory {
@Override
protected IJewelryBusinessProcess createConcreteProcess() {
return new RawMaterialPurchaseProcess();
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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/6 - 23:52
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : TrainingFactory.java
* explain : 学习 类
**/
package FactoryMethodPattern.businessmodule.factories;
import FactoryMethodPattern.businessmodule.processes.TrainingProcess;
import FactoryMethodPattern.core.abstractions.IJewelryBusinessProcess;
import FactoryMethodPattern.core.abstractions.JewelryBusinessFactory;
public class TrainingFactory extends JewelryBusinessFactory {
@Override
protected IJewelryBusinessProcess createConcreteProcess() {
return new TrainingProcess();
}
}
调用:
java
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:Factory Method 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 - 10:57
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : FactoryMethodBll.java
* explain : 学习 类
**/
package BLL;
import FactoryMethodPattern.businessmodule.factories.*;
import FactoryMethodPattern.core.models.ProcessContext;
import FactoryMethodPattern.infrastructure.concurrency.ProcessConcurrentScheduler;
import FactoryMethodPattern.infrastructure.logging.LoggerFactoryUtil;
import FactoryMethodPattern.infrastructure.logging.LogScopeHelper;
import org.slf4j.Logger;
import java.math.BigDecimal;
import java.util.concurrent.CompletableFuture;
public class FactoryMethodBll {
private static final Logger log = LoggerFactoryUtil.getLogger(FactoryMethodBll.class);
public void demo() { //throws InterruptedException
ProcessContext globalCtx = new ProcessContext();
globalCtx.setTransactionRequired(true);
globalCtx.getDataBag().put("MaterialWeight", new BigDecimal("1200.00"));
try (LogScopeHelper rootScope = LogScopeHelper.createBusinessScope(globalCtx.getTraceId().toString(), "程序入口")) {
log.info("珠宝企业工厂业务系统启动,链路TraceId:{}", globalCtx.getTraceId());
ProcessConcurrentScheduler scheduler = new ProcessConcurrentScheduler(12);
scheduler.registerFactory(new RawMaterialPurchaseFactory());
scheduler.registerFactory(new DesignDrawingFactory());
scheduler.registerFactory(new ProductionFactory());
scheduler.registerFactory(new QualityInspectionFactory());
scheduler.registerFactory(new PackagingFactory());
scheduler.registerFactory(new LogisticsFactory());
scheduler.registerFactory(new FinanceFactory());
scheduler.registerFactory(new MarketingFactory());
scheduler.registerFactory(new BusinessFactory());
scheduler.registerFactory(new HRAdminFactory());
scheduler.registerFactory(new ITFactory());
scheduler.registerFactory(new TrainingFactory());
System.out.println("\n==================== 同步高并发执行 ====================");
scheduler.runAllSync(globalCtx);
System.out.println("\n==================== 异步高并发执行 ====================");
CompletableFuture<Void> asyncTask = scheduler.runAllAsync(globalCtx);
asyncTask.join();
try {
scheduler.shutdown();
} catch (InterruptedException e) {
log.error("线程池关闭被中断", e);
Thread.currentThread().interrupt();
}
log.info("全部业务流程执行完成,程序即将退出");
}
System.out.println("执行完成,按回车退出");
// 捕获IO异常,兼容无控制台环境(服务器运行不会报错)
try {
System.in.read();
} catch (IOException e) {
log.warn("控制台读取输入失败,非本地终端环境,跳过等待", e);
}
}
}
输出:
