java: Factory Method Pattern

项目结构:

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);
        }
    }
}

输出:

相关推荐
voicelen1 小时前
一通电话背后有多少角色?我拆了 Voicelen 的调度台给你看
后端
程序员小八7771 小时前
如何自研一个全局异常处理器
java
用户8017220416391 小时前
BarQode:C# 条码二维码生成库
后端
风中的小甜瓜1 小时前
ASP.NET Page 那点事
java·前端·asp.net
考虑考虑1 小时前
kafka4安装
后端·kafka·自动化运维
m0_587098991 小时前
Qt,二进制文件读写建议
开发语言·qt
orient1 小时前
慢查询优化 10 招:从 EXPLAIN 到索引重建
后端
爱敲代码的小鱼1 小时前
springsecurity:
java·开发语言·数据库
豆沙小饼干1 小时前
MySQL 小白循序渐进实操路线(纯动手,跟着敲就能练,全程生活化案例:外卖平台)
java