项目结构:

/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 备忘录模式 Memento Pattern* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/5 - 22:11* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : ConcurrentSafeHelper.java* explain : 学习 类**/package MementoPattern.Common;import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.function.Consumer;
import java.util.function.Supplier;/*** 线程安全通用工具类* 封装读写分离锁、安全读写方法,全局复用,统一并发管控规范*/
public final class ConcurrentSafeHelper {/*** 创建无递归读写分离锁,读多写少高性能场景推荐* @return 读写锁实例*/public static ReentrantReadWriteLock createReadWriteLock() {return new ReentrantReadWriteLock(false);}/*** 线程安全执行写入操作* @param rwLock 读写锁对象* @param writeAction 待执行写入逻辑*/public static void safeWrite(ReentrantReadWriteLock rwLock, Runnable writeAction) {if (rwLock == null || writeAction == null) {return;}ReentrantReadWriteLock.WriteLock writeLock = rwLock.writeLock();writeLock.lock();try {writeAction.run();} finally {writeLock.unlock();}}/*** 线程安全执行无返回值读取操作* @param rwLock 读写锁对象* @param readAction 读取逻辑*/public static void safeRead(ReentrantReadWriteLock rwLock, Runnable readAction) {if (rwLock == null || readAction == null) {return;}ReentrantReadWriteLock.ReadLock readLock = rwLock.readLock();readLock.lock();try {readAction.run();} finally {readLock.unlock();}}/*** 线程安全读取带返回值泛型方法* @param rwLock 读写锁* @param readFunc 读取委托* @return 读取结果*/public static <T> T safeRead(ReentrantReadWriteLock rwLock, Supplier<T> readFunc) {if (rwLock == null || readFunc == null) {return null;}ReentrantReadWriteLock.ReadLock readLock = rwLock.readLock();readLock.lock();try {return readFunc.get();} finally {readLock.unlock();}}//私有构造禁止实例化private ConcurrentSafeHelper() {throw new AssertionError("工具类不可实例化");}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 备忘录模式 Memento Pattern* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/5 - 22:10* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : GlobalConfig.java* explain : 学习 类**/package MementoPattern.Common;/*** 全局静态统一配置类* 集中管理日志路径、格式化模板、系统常量,统一修改便于扩展维护*/
public final class GlobalConfig {/*** 日志根文件夹名称*/public static final String LOG_ROOT_DIRECTORY = "Logs";/*** 日期文件夹格式化模板,生成如 2026-08-05*/public static final String LOG_DAY_FOLDER_FORMAT = "%d{yyyy-MM-dd}";/*** 日志文件名模板:app-{级别}.log*/public static final String LOG_FILE_NAME_TEMPLATE = "app-%s.log";/*** 日志时间戳格式化模板,精确到毫秒*/public static final String LOG_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS";/*** 珠宝业务编号前缀*/public static final String BUSINESS_SN_PREFIX = "JEW-ENTER-";/*** 全局最低日志级别*/public static final org.slf4j.event.Level GLOBAL_MIN_LOG_LEVEL = org.slf4j.event.Level.DEBUG;//私有构造禁止实例化private GlobalConfig() {throw new AssertionError("静态配置类不可实例化");}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 备忘录模式 Memento Pattern* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/5 - 22:12* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : BaseMemento.java* explain : 学习 类**/package MementoPattern.Core.Base;import java.time.LocalDateTime;/*** 备忘录模式顶层抽象快照基类* 定义所有快照通用基础属性,后续任意业务快照可继承扩展*/
public abstract class BaseMemento {/*** 快照创建时间*/private final LocalDateTime createTime;/*** 业务唯一编号*/private final String businessSn;/*** 基础快照构造初始化* @param businessSn 业务唯一编号*/protected BaseMemento(String businessSn) {this.businessSn = businessSn;this.createTime = LocalDateTime.now();}public LocalDateTime getCreateTime() {return createTime;}public String getBusinessSn() {return businessSn;}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 备忘录模式 Memento Pattern* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/5 - 22:11* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : BaseService.java* explain : 学习 类**/package MementoPattern.Core.Base;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** 所有业务服务、调度器、模式类统一父基类* 子类自动绑定对应Logger,全局统一日志依赖,规范编码结构* @param <T> 当前子类自身类型*/
public abstract class BaseService<T> {/*** 当前类专属日志实例,子类直接使用输出日志*/protected final Logger logger;/*** 构造自动初始化当前类Logger*/@SuppressWarnings("unchecked")protected BaseService() {Class<T> clazz = (Class<T>) getClass();this.logger = LoggerFactory.getLogger(clazz);}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 备忘录模式 Memento Pattern* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/5 - 22:14* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : LoggerBuildFactory.java* explain : 学习 类**/package MementoPattern.Core.Logging;import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.ConsoleAppender;
import ch.qos.logback.core.rolling.RollingFileAppender;
import ch.qos.logback.core.rolling.TimeBasedRollingPolicy;
import ch.qos.logback.core.util.FileSize;
import MementoPattern.Common.GlobalConfig;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;/*** 日志构建工厂类* 统一初始化控制台+分级文件日志,实现按日期文件夹、日志等级拆分文件、多线程安全写入*/
public class LoggerBuildFactory {/*** 全局日志统一初始化方法*/public static void buildGlobalLogger() {LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();context.reset();//1、构建编码器(控制台+文件共用一套格式)PatternLayoutEncoder encoder = buildEncoder(context);//2、注册控制台输出ConsoleAppender<ILoggingEvent> consoleAppender = buildConsoleAppender(context, encoder);//3、注册4个分级文件日志(debug/info/warn/error)buildLevelFileAppender(context, encoder, Level.DEBUG, "debug");buildLevelFileAppender(context, encoder, Level.INFO, "info");buildLevelFileAppender(context, encoder, Level.WARN, "warn");buildLevelFileAppender(context, encoder, Level.ERROR, "error");//4、全局根日志配置ch.qos.logback.classic.Logger rootLogger = context.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);rootLogger.setLevel(Level.DEBUG);rootLogger.addAppender(consoleAppender);//过滤框架冗余日志context.getLogger("org.springframework").setLevel(Level.WARN);}/*** 构建统一格式编码器*/private static PatternLayoutEncoder buildEncoder(LoggerContext context) {PatternLayoutEncoder encoder = new PatternLayoutEncoder();encoder.setContext(context);encoder.setPattern(LogUniformFormatter.LOG_PATTERN);encoder.start();return encoder;}/*** 构建控制台追加器*/private static ConsoleAppender<ILoggingEvent> buildConsoleAppender(LoggerContext context, PatternLayoutEncoder encoder) {ConsoleAppender<ILoggingEvent> consoleAppender = new ConsoleAppender<>();consoleAppender.setContext(context);consoleAppender.setEncoder(encoder);consoleAppender.start();return consoleAppender;}/*** 构建单等级文件日志追加器,按日期文件夹归档*/private static void buildLevelFileAppender(LoggerContext context, PatternLayoutEncoder encoder, Level level, String levelName) {RollingFileAppender<ILoggingEvent> fileAppender = new RollingFileAppender<>();fileAppender.setContext(context);// 当前日志文件路径(使用实际日期)String today = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));String currentFilePath = GlobalConfig.LOG_ROOT_DIRECTORY + File.separator+ today + File.separator+ String.format(GlobalConfig.LOG_FILE_NAME_TEMPLATE, levelName);// 滚动归档文件路径模式(使用Logback日期占位符)String archivePattern = GlobalConfig.LOG_ROOT_DIRECTORY + File.separator+ "%d{yyyy-MM-dd}" + File.separator+ String.format(GlobalConfig.LOG_FILE_NAME_TEMPLATE, levelName);fileAppender.setFile(currentFilePath);fileAppender.setEncoder(encoder);//按日期滚动策略TimeBasedRollingPolicy<ILoggingEvent> rollingPolicy = new TimeBasedRollingPolicy<>();rollingPolicy.setContext(context);rollingPolicy.setFileNamePattern(archivePattern);rollingPolicy.setMaxHistory(90);rollingPolicy.setTotalSizeCap(FileSize.valueOf("5GB"));// 必须先setRollingPolicy(内部会设置parent),再由fileAppender.start()启动policyfileAppender.setRollingPolicy(rollingPolicy);// 不要单独调用 rollingPolicy.start(),fileAppender.start() 会自动启动它//级别过滤器ch.qos.logback.classic.filter.LevelFilter levelFilter = new ch.qos.logback.classic.filter.LevelFilter();levelFilter.setLevel(level);levelFilter.setOnMatch(ch.qos.logback.core.spi.FilterReply.ACCEPT);levelFilter.setOnMismatch(ch.qos.logback.core.spi.FilterReply.DENY);levelFilter.start();fileAppender.addFilter(levelFilter);fileAppender.start();//挂载到根日志ch.qos.logback.classic.Logger root = context.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);root.addAppender(fileAppender);}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 备忘录模式 Memento Pattern* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/5 - 22:12* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : LogUniformFormatter.java* explain : 学习 类**/package MementoPattern.Core.Logging;import MementoPattern.Common.GlobalConfig;/*** 统一日志格式化提供器* 严格保证控制台日志、文件日志格式100%完全一致*/
public final class LogUniformFormatter {/*** 获取统一日志格式字符串模板*/public static final String LOG_PATTERN ="%d{" + GlobalConfig.LOG_TIME_FORMAT + "} [%thread] %-5level %logger{36} - %msg%n";private LogUniformFormatter() {throw new AssertionError("静态工具类不可实例化");}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 备忘录模式 Memento Pattern* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/6 - 22:22* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : BusinessOriginator.java* explain : 学习 类**/package MementoPattern.Pattern.Memento;import MementoPattern.Core.Base.BaseService;import java.math.BigDecimal;/*** 备忘录原发器:持有全业务运行状态* 负责生成快照、快照回滚恢复业务历史状态*/
public class BusinessOriginator extends BaseService<BusinessOriginator> {//当前业务运行状态字段private String currentBusinessSn = "";private String currentMaterial = "";private BigDecimal currentWeight = BigDecimal.ZERO;private String currentDesign = "";private String currentCraft = "";private BigDecimal currentScore = BigDecimal.ZERO;private BigDecimal currentAmount = BigDecimal.ZERO;//Getter & Setterpublic String getCurrentBusinessSn() {return currentBusinessSn;}public void setCurrentBusinessSn(String currentBusinessSn) {this.currentBusinessSn = currentBusinessSn;}public String getCurrentMaterial() {return currentMaterial;}public void setCurrentMaterial(String currentMaterial) {this.currentMaterial = currentMaterial;}public BigDecimal getCurrentWeight() {return currentWeight;}public void setCurrentWeight(BigDecimal currentWeight) {this.currentWeight = currentWeight;}public String getCurrentDesign() {return currentDesign;}public void setCurrentDesign(String currentDesign) {this.currentDesign = currentDesign;}public String getCurrentCraft() {return currentCraft;}public void setCurrentCraft(String currentCraft) {this.currentCraft = currentCraft;}public BigDecimal getCurrentScore() {return currentScore;}public void setCurrentScore(BigDecimal currentScore) {this.currentScore = currentScore;}public BigDecimal getCurrentAmount() {return currentAmount;}public void setCurrentAmount(BigDecimal currentAmount) {this.currentAmount = currentAmount;}/*** 根据当前实时业务状态生成快照* @return 业务快照对象*/public JewelryBusinessMemento createMemento() {logger.debug("【快照生成】业务编号:{},记录当前全流程业务状态", currentBusinessSn);return new JewelryBusinessMemento(currentBusinessSn, currentMaterial, currentWeight,currentDesign, currentCraft, currentScore, currentAmount);}/*** 使用历史快照回滚业务状态* @param memento 待恢复快照*/public void restoreMemento(JewelryBusinessMemento memento) {if (memento == null) {logger.warn("快照为空,无法执行回滚操作");return;}this.currentBusinessSn = memento.getBusinessSn();this.currentMaterial = memento.getMaterialName();this.currentWeight = memento.getMaterialWeight();this.currentDesign = memento.getDesignContent();this.currentCraft = memento.getCraftType();this.currentScore = memento.getQualityScore();this.currentAmount = memento.getFinanceAmount();logger.info("【业务回滚成功】{}已恢复至{}历史快照", currentBusinessSn, memento.getCreateTime());}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 备忘录模式 Memento Pattern* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/6 - 22:21* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : JewelryBusinessMemento.java* explain : 学习 类**/package MementoPattern.Pattern.Memento;import MementoPattern.Core.Base.BaseMemento;
import java.math.BigDecimal;/*** 珠宝全业务快照实体* 存储原料、设计、加工、质检、财务等全流程业务状态,用于版本回滚、历史存档*/
public class JewelryBusinessMemento extends BaseMemento {/*** 原料名称*/private final String materialName;/*** 原料重量(g)*/private final BigDecimal materialWeight;/*** 设计图纸文案内容*/private final String designContent;/*** 加工工艺类型*/private final String craftType;/*** 成品质检分数*/private final BigDecimal qualityScore;/*** 本次业务财务金额*/private final BigDecimal financeAmount;/*** 构造快照对象,记录全业务状态* @param businessSn 业务编号* @param materialName 原料名称* @param materialWeight 原料重量* @param designContent 图纸内容* @param craftType 加工工艺* @param qualityScore 质检分数* @param financeAmount 财务金额*/public JewelryBusinessMemento(String businessSn, String materialName, BigDecimal materialWeight,String designContent, String craftType, BigDecimal qualityScore, BigDecimal financeAmount) {super(businessSn);this.materialName = materialName;this.materialWeight = materialWeight;this.designContent = designContent;this.craftType = craftType;this.qualityScore = qualityScore;this.financeAmount = financeAmount;}// Getterpublic String getMaterialName() {return materialName;}public BigDecimal getMaterialWeight() {return materialWeight;}public String getDesignContent() {return designContent;}public String getCraftType() {return craftType;}public BigDecimal getQualityScore() {return qualityScore;}public BigDecimal getFinanceAmount() {return financeAmount;}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 备忘录模式 Memento Pattern* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/6 - 22:23* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : MementoCaretaker.java* explain : 学习 类**/package MementoPattern.Pattern.Memento;import MementoPattern.Common.ConcurrentSafeHelper;
import MementoPattern.Core.Base.BaseService;import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.concurrent.locks.ReentrantReadWriteLock;/*** 快照保管员:统一存储、查询、管理所有业务快照* 读写分离锁保证高并发线程安全*/
public class MementoCaretaker extends BaseService<MementoCaretaker> {/*** 读写分离锁,管控快照集合并发读写*/private final ReentrantReadWriteLock rwLock;/*** 内存快照仓库*/private final List<JewelryBusinessMemento> mementoStore;public MementoCaretaker() {super();this.rwLock = ConcurrentSafeHelper.createReadWriteLock();this.mementoStore = new ArrayList<>();}/*** 新增快照入库(独占写锁)* @param memento 快照对象*/public void addMemento(JewelryBusinessMemento memento) {if (memento == null) {logger.warn("待入库快照为空,入库失败");return;}ConcurrentSafeHelper.safeWrite(rwLock, () -> mementoStore.add(memento));logger.debug("快照仓库新增业务[{}]历史版本", memento.getBusinessSn());}/*** 根据业务编号查询全部历史快照,时间倒序* @param businessSn 业务编号* @return 快照集合*/public List<JewelryBusinessMemento> getAllHistory(String businessSn) {return ConcurrentSafeHelper.safeRead(rwLock, () -> mementoStore.stream().filter(item -> item.getBusinessSn().equals(businessSn)).sorted(Comparator.comparing(JewelryBusinessMemento::getCreateTime).reversed()).toList());}/*** 获取指定业务最新快照* @param businessSn 业务编号* @return 最新快照,无则null*/public JewelryBusinessMemento getLatestMemento(String businessSn) {return ConcurrentSafeHelper.safeRead(rwLock, () -> mementoStore.stream().filter(item -> item.getBusinessSn().equals(businessSn)).max(Comparator.comparing(JewelryBusinessMemento::getCreateTime)).orElse(null));}/*** 清空指定业务全部快照* @param businessSn 业务编号*/public void clearBusinessHistory(String businessSn) {ConcurrentSafeHelper.safeWrite(rwLock, () -> mementoStore.removeIf(item -> item.getBusinessSn().equals(businessSn)));logger.info("已清空业务[{}]全部历史快照", businessSn);}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 备忘录模式 Memento Pattern* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/6 - 22:34* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : IWorkflowSchedule.java* explain : 学习 类**/package MementoPattern.Workflow;import java.util.concurrent.CompletableFuture;/*** 流水线调度顶层抽象接口* 新增流程仅需实现接口,完全满足开闭原则,高扩展*/
public interface IWorkflowSchedule {/*** 异步执行全业务流水线*/CompletableFuture<Void> runWholeWorkflowAsync();
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 备忘录模式 Memento Pattern* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 17* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/6 - 22:34* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : JewelryWholeWorkflowScheduler.java* explain : 学习 类**/package MementoPattern.Workflow;import MementoPattern.Business.*;
import MementoPattern.Common.GlobalConfig;
import MementoPattern.Core.Base.BaseService;
import MementoPattern.Pattern.Memento.BusinessOriginator;
import MementoPattern.Pattern.Memento.MementoCaretaker;import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;/*** 珠宝全业务流水线调度器* 严格顺序串联12大业务流程:洽谈→采购→设计→加工→质检→包装→物流→财务→营销→人事→IT→培训*/
public class JewelryWholeWorkflowScheduler extends BaseService<JewelryWholeWorkflowScheduler> implements IWorkflowSchedule {//全部业务服务private final BusinessNegotiateService negotiateService;private final MaterialPurchaseService purchaseService;private final DesignDrawService designService;private final ProduceProcessService produceService;private final QualityInspectService inspectService;private final PackageService packageService;private final LogisticsService logisticsService;private final FinanceAccountService financeService;private final MarketingPromoteService marketingService;private final HrAdminService hrService;private final ItOperationService itService;private final StaffTrainService trainService;private static final DateTimeFormatter SN_FORMAT = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");public JewelryWholeWorkflowScheduler() {// 手动创建备忘录模式核心组件BusinessOriginator originator = new BusinessOriginator();MementoCaretaker caretaker = new MementoCaretaker();// 手动创建所有业务服务(替代Spring注入)this.negotiateService = new BusinessNegotiateService();this.purchaseService = new MaterialPurchaseService();this.designService = new DesignDrawService(originator, caretaker);this.produceService = new ProduceProcessService(originator, caretaker);this.inspectService = new QualityInspectService(originator, caretaker);this.packageService = new PackageService();this.logisticsService = new LogisticsService();this.financeService = new FinanceAccountService(originator, caretaker);this.marketingService = new MarketingPromoteService();this.hrService = new HrAdminService();this.itService = new ItOperationService();this.trainService = new StaffTrainService();}@Overridepublic CompletableFuture<Void> runWholeWorkflowAsync() {return CompletableFuture.runAsync(() -> {String sn = GlobalConfig.BUSINESS_SN_PREFIX + LocalDateTime.now().format(SN_FORMAT);logger.info("==================== 珠宝全业务流水线【开始执行】 编号:{} ====================", sn);sleepMs(50);//1 客户洽谈negotiateService.customerTalk("深圳高端私人客户", "18K金一克拉钻戒定制,六爪镶嵌");sleepMs(50);//2 原料采购核验boolean purchasePass = purchaseService.purchaseCheck("黄金", new BigDecimal("62.8"));if (!purchasePass) {logger.error("原料核验失败,流水线强制终止");return;}sleepMs(50);//3 设计制图designService.createDraft(sn, "黄金", new BigDecimal("62.8"),"六爪镶嵌钻戒,戒圈防滑磨砂,主钻1克拉,副钻环绕点缀");sleepMs(50);//4 加工生产produceService.startProduce(sn, "镶嵌+精细抛光");sleepMs(50);//5 质检inspectService.doInspect(sn);sleepMs(50);//6 包装packageService.packageGoods(sn, "高端实木珍藏礼盒");sleepMs(50);//7 物流logisticsService.sendDelivery("WL20260805001", "广东省深圳市福田珠宝产业园");sleepMs(50);//8 财务记账financeService.createBill(sn, new BigDecimal("36800"));sleepMs(50);//9 营销活动marketingService.launchActivity("七夕钻戒特惠定制活动");sleepMs(50);//10 人事排班hrService.staffManage("车间班组人员轮班调整");sleepMs(50);//11 IT运维itService.systemMaintain("订单数据库索引优化、性能巡检");sleepMs(50);//12 员工培训trainService.arrangeTrain("新设计师小张", "钻石镶嵌工艺进阶课程");logger.info("==================== 珠宝全业务流水线【全部执行完毕】 编号:{} ====================", sn);});}/*** 线程休眠*/private void sleepMs(long ms) {try {TimeUnit.MILLISECONDS.sleep(ms);} catch (InterruptedException e) {Thread.currentThread().interrupt();logger.warn("线程休眠中断", e);}}
}
/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 备忘录模式 Memento Pattern* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/5 - 22:32* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : BusinessNegotiateService.java* explain : 学习 类**/package MementoPattern.Business;import MementoPattern.Core.Base.BaseService;/*** 业务9:客户业务洽谈服务*/
public class BusinessNegotiateService extends BaseService<BusinessNegotiateService> {public void customerTalk(String customerName, String demand) {logger.info("【业务洽谈】客户:{},定制需求:{}", customerName, demand);}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 备忘录模式 Memento Pattern* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/5 - 22:25* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : DesignDrawService.java* explain : 学习 类**/package MementoPattern.Business;import MementoPattern.Core.Base.BaseService;
import MementoPattern.Pattern.Memento.BusinessOriginator;
import MementoPattern.Pattern.Memento.JewelryBusinessMemento;
import MementoPattern.Pattern.Memento.MementoCaretaker;import java.math.BigDecimal;/*** 业务2:珠宝设计制图服务* 职责:图纸创建、状态更新、快照存档*/
public class DesignDrawService extends BaseService<DesignDrawService> {private final BusinessOriginator originator;private final MementoCaretaker caretaker;public DesignDrawService(BusinessOriginator originator, MementoCaretaker caretaker) {this.originator = originator;this.caretaker = caretaker;}/*** 创建设计图纸并自动快照存档* @param businessSn 业务编号* @param material 绑定原料* @param weight 原料重量* @param designText 图纸详情*/public void createDraft(String businessSn, String material, BigDecimal weight, String designText) {logger.info("【珠宝设计制图】{}开始绘制图纸", businessSn);originator.setCurrentBusinessSn(businessSn);originator.setCurrentMaterial(material);originator.setCurrentWeight(weight);originator.setCurrentDesign(designText);//生成快照存档JewelryBusinessMemento snap = originator.createMemento();caretaker.addMemento(snap);logger.debug("图纸内容:{}", designText);}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 备忘录模式 Memento Pattern* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/5 - 22:31* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : FinanceAccountService.java* explain : 学习 类**/package MementoPattern.Business;import MementoPattern.Core.Base.BaseService;
import MementoPattern.Pattern.Memento.BusinessOriginator;
import MementoPattern.Pattern.Memento.JewelryBusinessMemento;
import MementoPattern.Pattern.Memento.MementoCaretaker;import java.math.BigDecimal;/*** 业务7:财务记账核算服务*/
public class FinanceAccountService extends BaseService<FinanceAccountService> {private final BusinessOriginator originator;private final MementoCaretaker caretaker;public FinanceAccountService(BusinessOriginator originator, MementoCaretaker caretaker) {this.originator = originator;this.caretaker = caretaker;}public void createBill(String businessSn, BigDecimal amount) {logger.info("【财务记账】{}入账金额:{}元", businessSn, amount);originator.setCurrentBusinessSn(businessSn);originator.setCurrentAmount(amount);JewelryBusinessMemento snap = originator.createMemento();caretaker.addMemento(snap);}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 备忘录模式 Memento Pattern* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/5 - 22:33* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : HrAdminService.java* explain : 学习 类**/package MementoPattern.Business;import MementoPattern.Core.Base.BaseService;/*** 业务10:人事行政管理服务*/
public class HrAdminService extends BaseService<HrAdminService> {public void staffManage(String operate) {logger.info("【人事行政】执行人员管理操作:{}", operate);}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 备忘录模式 Memento Pattern* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/5 - 22:33* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : ItOperationService.java* explain : 学习 类**/package MementoPattern.Business;import MementoPattern.Core.Base.BaseService;/*** 业务11:IT系统运维服务*/
public class ItOperationService extends BaseService<ItOperationService> {public void systemMaintain(String workDetail) {logger.info("【IT运维】执行维护任务:{}", workDetail);}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 备忘录模式 Memento Pattern* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/5 - 22:31* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : LogisticsService.java* explain : 学习 类**/package MementoPattern.Business;import MementoPattern.Core.Base.BaseService;/*** 业务6:物流配送服务*/
public class LogisticsService extends BaseService<LogisticsService> {public void sendDelivery(String deliveryNo, String address) {logger.info("【物流发货】单号{}下发配送,收货地址:{}", deliveryNo, address);}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 备忘录模式 Memento Pattern* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/5 - 22:32* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : MarketingPromoteService.java* explain : 学习 类**/package MementoPattern.Business;import MementoPattern.Core.Base.BaseService;/*** 业务8:营销推广服务*/
public class MarketingPromoteService extends BaseService<MarketingPromoteService> {public void launchActivity(String activityName) {logger.info("【营销推广】活动[{}]全渠道上线", activityName);logger.debug("门店、电商、短视频渠道同步投放预热");}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 备忘录模式 Memento Pattern* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/5 - 22:24* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : MaterialPurchaseService.java* explain : 学习 类**/package MementoPattern.Business;import MementoPattern.Core.Base.BaseService;import java.util.Set;/*** 业务1:原料采购核验服务* 职责:原料合法性校验、入库判定、日志记录*/
public class MaterialPurchaseService extends BaseService<MaterialPurchaseService> {private static final Set<String> LEGAL_MATERIALS = Set.of("黄金", "铂金", "钻石", "玉石");/*** 原料采购入库核验* @param materialName 原料名称:黄金/铂金/钻石/玉石* @param weight 原料重量g* @return true核验通过入库,false驳回*/public boolean purchaseCheck(String materialName, java.math.BigDecimal weight) {logger.info("【原料采购核验】原料:{},重量:{}g", materialName, weight);boolean legalMaterial = LEGAL_MATERIALS.contains(materialName);boolean legalWeight = weight.compareTo(java.math.BigDecimal.ZERO) > 0;boolean pass = legalMaterial && legalWeight;if (pass) {logger.info("原料核验通过,准许入库登记");} else {logger.error("原料非法/重量异常,驳回入库申请");}return pass;}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 备忘录模式 Memento Pattern* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/5 - 22:30* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : PackageService.java* explain : 学习 类**/package MementoPattern.Business;import MementoPattern.Core.Base.BaseService;/*** 业务5:成品包装服务* 职责:礼盒封装、防伪绑定*/
public class PackageService extends BaseService<PackageService> {public void packageGoods(String businessSn, String boxType) {logger.info("【成品包装】{}使用{}礼盒封装", businessSn, boxType);logger.debug("防伪标签、珠宝鉴定证书绑定完成");}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 备忘录模式 Memento Pattern* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/5 - 22:28* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : ProduceProcessService.java* explain : 学习 类**/package MementoPattern.Business;import MementoPattern.Core.Base.BaseService;
import MementoPattern.Pattern.Memento.BusinessOriginator;
import MementoPattern.Pattern.Memento.JewelryBusinessMemento;
import MementoPattern.Pattern.Memento.MementoCaretaker;import java.util.Random;/*** 业务3:加工生产服务* 职责:下发加工任务、进度监控、工艺记录*/
public class ProduceProcessService extends BaseService<ProduceProcessService> {private static final Random RANDOM = new Random();private final BusinessOriginator originator;private final MementoCaretaker caretaker;public ProduceProcessService(BusinessOriginator originator, MementoCaretaker caretaker) {this.originator = originator;this.caretaker = caretaker;}/*** 启动加工任务* @param businessSn 业务编号* @param craft 工艺:镶嵌/雕花/抛光/拉丝*/public void startProduce(String businessSn, String craft) {logger.info("【加工生产】{}启动{}工艺加工", businessSn, craft);originator.setCurrentBusinessSn(businessSn);originator.setCurrentCraft(craft);int progress = RANDOM.nextInt(20, 101);logger.debug("实时加工进度:{}%", progress);JewelryBusinessMemento snap = originator.createMemento();caretaker.addMemento(snap);}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 备忘录模式 Memento Pattern* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/5 - 22:28* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : QualityInspectService.java* explain : 学习 类**/package MementoPattern.Business;import MementoPattern.Core.Base.BaseService;
import MementoPattern.Pattern.Memento.BusinessOriginator;
import MementoPattern.Pattern.Memento.JewelryBusinessMemento;
import MementoPattern.Pattern.Memento.MementoCaretaker;import java.math.BigDecimal;
import java.util.Random;/*** 业务4:成品质检服务* 职责:质量打分、等级判定、快照存档*/
public class QualityInspectService extends BaseService<QualityInspectService> {private static final Random RANDOM = new Random();private final BusinessOriginator originator;private final MementoCaretaker caretaker;public QualityInspectService(BusinessOriginator originator, MementoCaretaker caretaker) {this.originator = originator;this.caretaker = caretaker;}/*** 执行质检* @param businessSn 业务编号* @return 质检分数*/public BigDecimal doInspect(String businessSn) {logger.info("【成品质量检测】开始检测{}", businessSn);BigDecimal score = BigDecimal.valueOf(RANDOM.nextInt(600, 1000)).divide(BigDecimal.TEN);originator.setCurrentBusinessSn(businessSn);originator.setCurrentScore(score);JewelryBusinessMemento snap = originator.createMemento();caretaker.addMemento(snap);if (score.compareTo(BigDecimal.valueOf(90)) >= 0) {logger.info("质检合格,评级优等");} else if (score.compareTo(BigDecimal.valueOf(70)) >= 0) {logger.warn("质检待复检,评级中等");} else {logger.error("质检不合格,判定报废");}return score;}
}/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 备忘录模式 Memento Pattern* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3.6 Java 21* # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j* # OS : window10* Datetime : 2026 - 2026/8/6 - 22:34* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : StaffTrainService.java* explain : 学习 类**/package MementoPattern.Business;import MementoPattern.Core.Base.BaseService;/*** 业务12:员工工艺培训服务*/
public class StaffTrainService extends BaseService<StaffTrainService> {public void arrangeTrain(String traineeName, String course) {logger.info("【员工培训】为{}安排{}课程", traineeName, course);}
}
调用:
/*** encoding: utf-8* 版权所有 2026 ©涂聚文有限公司 ®* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:行为模式 Behavioral Patterns 备忘录模式 Memento 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:06* User : geovindu* Product : IntelliJ IDEA* Project : javadesginpattern* File : MementoBll.java* explain : 学习 类**/package BLL;import MementoPattern.Core.Logging.LoggerBuildFactory;
import MementoPattern.Workflow.IWorkflowSchedule;
import MementoPattern.Workflow.JewelryWholeWorkflowScheduler;public class MementoBll {public void demo(){//1、全局日志初始化LoggerBuildFactory.buildGlobalLogger();//2、手动创建调度器执行流水线(替代Spring容器)IWorkflowSchedule scheduler = new JewelryWholeWorkflowScheduler();scheduler.runWholeWorkflowAsync().join();}
}
