Java: Mediator Pattern
项目结构:

/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 22:53
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : JewelBusinessMessageDto.java
* explain : 学习 类
**/
package MediatorPattern.core.dto;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.UUID;
/**
* 珠宝业务消息传输DTO
* 承载中介传递的业务消息数据,对应C# JewelBusinessMessageDto
*/
public class JewelBusinessMessageDto implements Serializable {
/**
* 业务唯一标识
*/
private UUID businessId;
/**
* 业务流程当前状态
*/
private int flowState;
/**
* 消息内容描述
*/
private String messageContent;
/**
* 目标部门编号,0代表广播全部部门
*/
private int targetDepartmentCode;
/**
* 消息发生时间
*/
private LocalDateTime occurTime;
/**
* 异常备注,存放异常堆栈文本
*/
private String remark;
public JewelBusinessMessageDto() {
}
public UUID getBusinessId() {
return businessId;
}
public void setBusinessId(UUID businessId) {
this.businessId = businessId;
}
public int getFlowState() {
return flowState;
}
public void setFlowState(int flowState) {
this.flowState = flowState;
}
public String getMessageContent() {
return messageContent;
}
public void setMessageContent(String messageContent) {
this.messageContent = messageContent;
}
public int getTargetDepartmentCode() {
return targetDepartmentCode;
}
public void setTargetDepartmentCode(int targetDepartmentCode) {
this.targetDepartmentCode = targetDepartmentCode;
}
public LocalDateTime getOccurTime() {
return occurTime;
}
public void setOccurTime(LocalDateTime occurTime) {
this.occurTime = occurTime;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 22:54
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : BusinessFlowState.java
* explain : 学习 类
**/
package MediatorPattern.core.enums;
/**
* 珠宝业务流程状态枚举
* 流转顺序:采购核验→设计制图→加工生产→质检→包装→物流→销售完成
*/
public enum BusinessFlowState {
/**
* 原料采购核验
*/
PURCHASE(1, "原料采购核验"),
/**
* 设计制图
*/
DESIGN(2, "设计制图"),
/**
* 加工生产
*/
MANUFACTURE(3, "加工生产"),
/**
* 质检
*/
QUALITY_INSPECT(4, "质检"),
/**
* 包装
*/
PACKAGE(5, "包装"),
/**
* 物流发货
*/
LOGISTICS(6, "物流发货"),
/**
* 业务销售完成
*/
SALE_COMPLETE(7, "销售完成");
private final int code;
private final String desc;
BusinessFlowState(int code, String desc) {
this.code = code;
this.desc = desc;
}
public int getCode() {
return code;
}
public String getDesc() {
return desc;
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 22:54
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : CircuitBreakerState.java
* explain : 学习 类
**/
package MediatorPattern.core.enums;
/**
* 熔断器状态枚举,对应C# CircuitBreakerState
*/
public enum CircuitBreakerState {
/**
* 闭合状态,允许请求通行
*/
CLOSED,
/**
* 打开熔断状态,直接拒绝请求
*/
OPEN,
/**
* 半开状态,放行少量探测请求
*/
HALF_OPEN
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 22:54
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : BusinessFlowException.java
* explain : 学习 类
**/
package MediatorPattern.core.exceptions;
/**
* 业务流程自定义异常,业务校验、非法状态跳转抛出
*/
public class BusinessFlowException extends RuntimeException {
/**
* 业务错误码
*/
private final int errorCode;
public BusinessFlowException(String message) {
super(message);
this.errorCode = 5000;
}
public BusinessFlowException(int errorCode, String message) {
super(message);
this.errorCode = errorCode;
}
public BusinessFlowException(int errorCode, String message, Throwable cause) {
super(message, cause);
this.errorCode = errorCode;
}
public int getErrorCode() {
return errorCode;
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 22:54
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : IBusinessColleague.java
* explain : 学习 类
**/
package MediatorPattern.core.interfaces;
import MediatorPattern.core.dto.JewelBusinessMessageDto;
/**
* 中介模式:同事接口,各个业务部门实现该接口
*/
public interface IBusinessColleague {
/**
* 获取绑定部门编码
* @return 部门数字编码
*/
int getDepartmentCode();
/**
* 设置中介者实例
* @param mediator 中介对象
*/
void setMediator(IJewelMediator mediator);
/**
* 接收中介转发业务消息
* @param messageDto 业务消息DTO
*/
void receiveMessage(JewelBusinessMessageDto messageDto);
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 22:55
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : IJewelMediator.java
* explain : 学习 类
**/
package MediatorPattern.core.interfaces;
import MediatorPattern.core.dto.JewelBusinessMessageDto;
/**
* 珠宝业务中介者顶层接口
* 负责消息分发:广播消息 / 定向发送指定部门
*/
public interface IJewelMediator {
/**
* 注册业务同事(部门处理器)
* @param colleague 部门实现
*/
void registerColleague(IBusinessColleague colleague);
/**
* 发送消息,根据DTO内targetDepartmentCode选择广播/定向路由
* @param dto 业务消息对象
*/
void send(JewelBusinessMessageDto dto);
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 22:55
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : IMessageRepository.java
* explain : 学习 类
**/
package MediatorPattern.core.interfaces;
import MediatorPattern.core.dto.JewelBusinessMessageDto;
import java.util.List;
import java.util.UUID;
/**
* 消息仓储接口,持久化业务消息记录
*/
public interface IMessageRepository {
/**
* 保存业务消息
* @param dto 消息DTO
*/
void save(JewelBusinessMessageDto dto);
/**
* 根据业务Id查询全部消息
* @param businessId 业务ID
* @return 消息集合
*/
List<JewelBusinessMessageDto> findByBusinessId(UUID businessId);
/**
* 查询全部消息
* @return 全部消息列表
*/
List<JewelBusinessMessageDto> findAll();
/**
* 删除指定业务全部消息
* @param businessId 业务ID
*/
void deleteByBusinessId(UUID businessId);
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 22:55
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : IResiliencePolicy.java
* explain : 学习 类
**/
package MediatorPattern.core.interfaces;
import MediatorPattern.core.enums.CircuitBreakerState;
import java.util.function.Supplier;
/**
* 弹性策略接口:重试、熔断
*/
public interface IResiliencePolicy {
/**
* 获取熔断器当前状态
* @return 熔断器状态枚举
*/
CircuitBreakerState getCircuitState();
/**
* 执行带熔断+重试保护逻辑
* @param supplier 业务执行逻辑
* @return 业务返回结果
* @param <T> 返回泛型
* @throws Exception 执行异常
*/
<T> T executeWithPolicy(Supplier<T> supplier) throws Exception;
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 22:55
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : IRetryMessageQueue.java
* explain : 学习 类
**/
package MediatorPattern.core.interfaces;
import MediatorPattern.core.dto.JewelBusinessMessageDto;
import java.util.List;
/**
* 重试消息队列接口
*/
public interface IRetryMessageQueue {
/**
* 入队待重试消息
* @param dto 业务消息
* @param retryCount 当前重试计数
*/
void enqueue(JewelBusinessMessageDto dto, int retryCount);
/**
* 获取待处理队列消息,非阻塞取出
* @param batchSize 批次大小
* @return 待处理消息集合
*/
List<JewelBusinessMessageDto> dequeuePending(int batchSize);
/**
* 获取队列当前长度
* @return 队列数量
*/
int getQueueSize();
/**
* 清空全部重试队列
*/
void clear();
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 22:56
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : ResiliencePolicyOptions.java
* explain : 学习 类
**/
package MediatorPattern.core.options;
/**
* 弹性策略配置项,对应C# ResiliencePolicyOptions
*/
public class ResiliencePolicyOptions {
/**
* 最大重试次数
*/
private int maxRetryTimes;
/**
* 熔断失败阈值,连续失败多少次打开熔断器
*/
private int circuitBreakerFailThreshold;
/**
* 熔断半开等待毫秒
*/
private long circuitBreakerWaitHalfOpenMs;
/**
* 重试休眠间隔毫秒
*/
private long retrySleepMs;
public ResiliencePolicyOptions() {
}
public int getMaxRetryTimes() {
return maxRetryTimes;
}
public void setMaxRetryTimes(int maxRetryTimes) {
this.maxRetryTimes = maxRetryTimes;
}
public int getCircuitBreakerFailThreshold() {
return circuitBreakerFailThreshold;
}
public void setCircuitBreakerFailThreshold(int circuitBreakerFailThreshold) {
this.circuitBreakerFailThreshold = circuitBreakerFailThreshold;
}
public long getCircuitBreakerWaitHalfOpenMs() {
return circuitBreakerWaitHalfOpenMs;
}
public void setCircuitBreakerWaitHalfOpenMs(long circuitBreakerWaitHalfOpenMs) {
this.circuitBreakerWaitHalfOpenMs = circuitBreakerWaitHalfOpenMs;
}
public long getRetrySleepMs() {
return retrySleepMs;
}
public void setRetrySleepMs(long retrySleepMs) {
this.retrySleepMs = retrySleepMs;
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 22:58
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : BusinessDepartment.java
* explain : 学习 类
**/
package MediatorPattern.application.businessdepartments;
import MediatorPattern.application.mediator.BaseBusinessColleague;
import MediatorPattern.core.dto.JewelBusinessMessageDto;
/**
* 业务部门
* 销售接单、客户对接、订单跟进、客诉处理
*/
public class BusinessDepartment extends BaseBusinessColleague {
@Override
public int getDepartmentCode() {
return 9;
}
@Override
public void receiveMessage(JewelBusinessMessageDto messageDto) {
System.out.printf("[业务部门] 收到业务消息 BusinessId:%s,内容:%s%n",
messageDto.getBusinessId(), messageDto.getMessageContent());
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 22:56
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : DesignDepartment.java
* explain : 学习 类
**/
package MediatorPattern.application.businessdepartments;
import MediatorPattern.application.mediator.BaseBusinessColleague;
import MediatorPattern.core.dto.JewelBusinessMessageDto;
/**
* 设计制图部门
*/
public class DesignDepartment extends BaseBusinessColleague {
@Override
public int getDepartmentCode() {
return 2;
}
@Override
public void receiveMessage(JewelBusinessMessageDto messageDto) {
System.out.printf("[设计制图部门] 收到业务消息 BusinessId:%s,内容:%s%n",
messageDto.getBusinessId(), messageDto.getMessageContent());
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 22:57
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : FinanceDepartment.java
* explain : 学习 类
**/
package MediatorPattern.application.businessdepartments;
import MediatorPattern.application.mediator.BaseBusinessColleague;
import MediatorPattern.core.dto.JewelBusinessMessageDto;
/**
* 财务部门
* 原料结算、成本核算、订单收款、票据对账
*/
public class FinanceDepartment extends BaseBusinessColleague {
@Override
public int getDepartmentCode() {
return 7;
}
@Override
public void receiveMessage(JewelBusinessMessageDto messageDto) {
System.out.printf("[财务部门] 收到业务消息 BusinessId:%s,内容:%s%n",
messageDto.getBusinessId(), messageDto.getMessageContent());
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 22:58
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : HrAdminDepartment.java
* explain : 学习 类
**/
package MediatorPattern.application.businessdepartments;
import MediatorPattern.application.mediator.BaseBusinessColleague;
import MediatorPattern.core.dto.JewelBusinessMessageDto;
/**
* 人事行政部门
* 人员管理、考勤、后勤行政、制度管理
*/
public class HrAdminDepartment extends BaseBusinessColleague {
@Override
public int getDepartmentCode() {
return 10;
}
@Override
public void receiveMessage(JewelBusinessMessageDto messageDto) {
System.out.printf("[人事行政部门] 收到业务消息 BusinessId:%s,内容:%s%n",
messageDto.getBusinessId(), messageDto.getMessageContent());
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 22:58
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : ItDepartment.java
* explain : 学习 类
**/
package MediatorPattern.application.businessdepartments;
import MediatorPattern.application.mediator.BaseBusinessColleague;
import MediatorPattern.core.dto.JewelBusinessMessageDto;
/**
* IT部门
* 系统运维、数据维护、软硬件故障处理
*/
public class ItDepartment extends BaseBusinessColleague {
@Override
public int getDepartmentCode() {
return 11;
}
@Override
public void receiveMessage(JewelBusinessMessageDto messageDto) {
System.out.printf("[IT部门] 收到业务消息 BusinessId:%s,内容:%s%n",
messageDto.getBusinessId(), messageDto.getMessageContent());
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 22:57
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : LogisticsDepartment.java
* explain : 学习 类
**/
package MediatorPattern.application.businessdepartments;
import MediatorPattern.application.mediator.BaseBusinessColleague;
import MediatorPattern.core.dto.JewelBusinessMessageDto;
/**
* 物流部门
* 珠宝货品安保发货、在途跟踪、出入库交接
*/
public class LogisticsDepartment extends BaseBusinessColleague {
@Override
public int getDepartmentCode() {
return 6;
}
@Override
public void receiveMessage(JewelBusinessMessageDto messageDto) {
System.out.printf("[物流部门] 收到业务消息 BusinessId:%s,内容:%s%n",
messageDto.getBusinessId(), messageDto.getMessageContent());
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 22:56
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : ManufactureDepartment.java
* explain : 学习 类
**/
package MediatorPattern.application.businessdepartments;
import MediatorPattern.application.mediator.BaseBusinessColleague;
import MediatorPattern.core.dto.JewelBusinessMessageDto;
/**
* 加工生产部门
* 负责珠宝毛坯加工、镶嵌、打磨工序处理
*/
public class ManufactureDepartment extends BaseBusinessColleague {
@Override
public int getDepartmentCode() {
return 3;
}
@Override
public void receiveMessage(JewelBusinessMessageDto messageDto) {
System.out.printf("[加工生产部门] 收到业务消息 BusinessId:%s,内容:%s%n",
messageDto.getBusinessId(), messageDto.getMessageContent());
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 22:58
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : MarketingDepartment.java
* explain : 学习 类
**/
package MediatorPattern.application.businessdepartments;
import MediatorPattern.application.mediator.BaseBusinessColleague;
import MediatorPattern.core.dto.JewelBusinessMessageDto;
/**
* 营销推广部门
* 新品宣传、活动策划、品牌推广、流量运营
*/
public class MarketingDepartment extends BaseBusinessColleague {
@Override
public int getDepartmentCode() {
return 8;
}
@Override
public void receiveMessage(JewelBusinessMessageDto messageDto) {
System.out.printf("[营销推广部门] 收到业务消息 BusinessId:%s,内容:%s%n",
messageDto.getBusinessId(), messageDto.getMessageContent());
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 22:57
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : PackageDepartment.java
* explain : 学习 类
**/
package MediatorPattern.application.businessdepartments;
import MediatorPattern.application.mediator.BaseBusinessColleague;
import MediatorPattern.core.dto.JewelBusinessMessageDto;
/**
* 包装部门
* 珠宝首饰礼盒包装、证书封装、防伪标签粘贴
*/
public class PackageDepartment extends BaseBusinessColleague {
@Override
public int getDepartmentCode() {
return 5;
}
@Override
public void receiveMessage(JewelBusinessMessageDto messageDto) {
System.out.printf("[包装部门] 收到业务消息 BusinessId:%s,内容:%s%n",
messageDto.getBusinessId(), messageDto.getMessageContent());
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 22:56
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : PurchaseDepartment.java
* explain : 学习 类
**/
package MediatorPattern.application.businessdepartments;
import MediatorPattern.application.mediator.BaseBusinessColleague;
import MediatorPattern.core.dto.JewelBusinessMessageDto;
/**
* 原料采购核验部门
*/
public class PurchaseDepartment extends BaseBusinessColleague {
@Override
public int getDepartmentCode() {
return 1;
}
@Override
public void receiveMessage(JewelBusinessMessageDto messageDto) {
System.out.printf("[采购核验部门] 收到业务消息 BusinessId:%s,内容:%s%n",
messageDto.getBusinessId(), messageDto.getMessageContent());
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 22:57
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : QualityInspectDepartment.java
* explain : 学习 类
**/
package MediatorPattern.application.businessdepartments;
import MediatorPattern.application.mediator.BaseBusinessColleague;
import MediatorPattern.core.dto.JewelBusinessMessageDto;
/**
* 质检部门
* 珠宝成品品质检验、宝石核验、瑕疵检测
*/
public class QualityInspectDepartment extends BaseBusinessColleague {
@Override
public int getDepartmentCode() {
return 4;
}
@Override
public void receiveMessage(JewelBusinessMessageDto messageDto) {
System.out.printf("[质检部门] 收到业务消息 BusinessId:%s,内容:%s%n",
messageDto.getBusinessId(), messageDto.getMessageContent());
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 22:59
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : TrainingDepartment.java
* explain : 学习 类
**/
package MediatorPattern.application.businessdepartments;
import MediatorPattern.application.mediator.BaseBusinessColleague;
import MediatorPattern.core.dto.JewelBusinessMessageDto;
/**
* 培训部门
* 员工技能培训、珠宝专业知识培训、岗位实训
*/
public class TrainingDepartment extends BaseBusinessColleague {
@Override
public int getDepartmentCode() {
return 12;
}
@Override
public void receiveMessage(JewelBusinessMessageDto messageDto) {
System.out.printf("[培训部门] 收到业务消息 BusinessId:%s,内容:%s%n",
messageDto.getBusinessId(), messageDto.getMessageContent());
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 22:59
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : DepartmentFactory.java
* explain : 学习 类
**/
package MediatorPattern.application.factory;
import MediatorPattern.application.businessdepartments.*;
import MediatorPattern.core.interfaces.IBusinessColleague;
import java.util.ArrayList;
import java.util.List;
/**
* 部门工厂类,批量创建全部12个业务部门实例
*/
public class DepartmentFactory {
/**
* 创建全部12个部门实例集合
* @return 全部部门处理器列表
*/
public static List<IBusinessColleague> createAllDepartments(){
List<IBusinessColleague> list = new ArrayList<>();
list.add(new PurchaseDepartment());
list.add(new DesignDepartment());
list.add(new ManufactureDepartment());
list.add(new QualityInspectDepartment());
list.add(new PackageDepartment());
list.add(new LogisticsDepartment());
list.add(new FinanceDepartment());
list.add(new MarketingDepartment());
list.add(new BusinessDepartment());
list.add(new HrAdminDepartment());
list.add(new ItDepartment());
list.add(new TrainingDepartment());
return list;
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 22:59
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : BaseBusinessColleague.java
* explain : 学习 类
**/
package MediatorPattern.application.mediator;
import MediatorPattern.core.dto.JewelBusinessMessageDto;
import MediatorPattern.core.interfaces.IBusinessColleague;
import MediatorPattern.core.interfaces.IJewelMediator;
/**
* 业务同事抽象基类,所有部门处理器继承此类
*/
public abstract class BaseBusinessColleague implements IBusinessColleague {
protected IJewelMediator mediator;
/**
* 部门编码,子类实现返回对应编码
* @return int
*/
@Override
public abstract int getDepartmentCode();
@Override
public void setMediator(IJewelMediator mediator) {
this.mediator = mediator;
}
/**
* 接收消息抽象方法,各部门实现业务处理逻辑
* @param messageDto 消息DTO
*/
@Override
public abstract void receiveMessage(JewelBusinessMessageDto messageDto);
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 22:59
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : JewelBusinessMediator.java
* explain : 学习 类
**/
package MediatorPattern.application.mediator;
import MediatorPattern.core.dto.JewelBusinessMessageDto;
import MediatorPattern.core.interfaces.IBusinessColleague;
import MediatorPattern.core.interfaces.IJewelMediator;
import java.util.ArrayList;
import java.util.List;
/**
* 珠宝业务中介实现,完成消息广播、定向路由
*/
public class JewelBusinessMediator implements IJewelMediator {
private final List<IBusinessColleague> colleagueList;
public JewelBusinessMediator() {
colleagueList = new ArrayList<>();
}
@Override
public void registerColleague(IBusinessColleague colleague) {
if (!colleagueList.contains(colleague)) {
colleagueList.add(colleague);
}
}
@Override
public void send(JewelBusinessMessageDto dto) {
int targetCode = dto.getTargetDepartmentCode();
if(targetCode == 0){
//广播全部部门
for (IBusinessColleague c : colleagueList) {
c.receiveMessage(dto);
}
}else{
//定向发送指定部门
for (IBusinessColleague c : colleagueList) {
if(c.getDepartmentCode() == targetCode){
c.receiveMessage(dto);
}
}
}
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 23:00
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : JewelFlowScheduler.java
* explain : 学习 类
**/
package MediatorPattern.application.scheduler;
import MediatorPattern.core.dto.JewelBusinessMessageDto;
import MediatorPattern.core.interfaces.IJewelMediator;
import MediatorPattern.core.interfaces.IRetryMessageQueue;
import java.time.LocalDateTime;
import java.util.UUID;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* 珠宝业务流程调度器
* 虚拟线程调度,后台轮询重试队列,驱动业务流转
*/
public class JewelFlowScheduler {
private final IJewelMediator mediator;
private final IRetryMessageQueue retryQueue;
private ScheduledExecutorService schedulerService;
private volatile boolean running;
public JewelFlowScheduler(IJewelMediator mediator, IRetryMessageQueue retryQueue) {
this.mediator = mediator;
this.retryQueue = retryQueue;
}
/**
* 启动调度器,后台定时轮询重试队列
*/
public void start(){
running = true;
//JDK21 虚拟线程调度池
schedulerService = Executors.newScheduledThreadPool(1, Thread.ofVirtual().factory());
schedulerService.scheduleAtFixedRate(this::pollRetryQueue, 0, 3, TimeUnit.SECONDS);
}
/**
* 停止调度任务
*/
public void stop(){
running = false;
if(schedulerService != null){
schedulerService.shutdown();
}
}
/**
* 轮询重试队列,取出消息重新交给中介分发
*/
private void pollRetryQueue(){
if(!running){
return;
}
try {
var pendingList = retryQueue.dequeuePending(10);
for(JewelBusinessMessageDto dto : pendingList){
dto.setOccurTime(LocalDateTime.now());
mediator.send(dto);
}
}catch (Exception ex){
ex.printStackTrace();
}
}
/**
* 提交业务消息进入调度流程
* @param businessId 业务ID
* @param targetDeptCode 目标部门编码,0广播
* @param content 消息内容
*/
public void submitBusinessMessage(UUID businessId, int targetDeptCode, String content){
JewelBusinessMessageDto dto = new JewelBusinessMessageDto();
dto.setBusinessId(businessId);
dto.setTargetDepartmentCode(targetDeptCode);
dto.setMessageContent(content);
dto.setOccurTime(LocalDateTime.now());
mediator.send(dto);
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 23:00
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : ConcurrentRequestLimiter.java
* explain : 学习 类
**/
package MediatorPattern.infrastructure.concurrency;
import java.util.concurrent.Semaphore;
/**
* 并发请求限流器,信号量实现高并发控制,线程安全
*/
public class ConcurrentRequestLimiter {
private final Semaphore semaphore;
/**
* @param maxConcurrent 最大允许并发数量
*/
public ConcurrentRequestLimiter(int maxConcurrent) {
semaphore = new Semaphore(maxConcurrent);
}
/**
* 获取许可,阻塞直到拿到许可
* @throws InterruptedException 中断异常
*/
public void acquire() throws InterruptedException {
semaphore.acquire();
}
/**
* 释放许可
*/
public void release(){
semaphore.release();
}
/**
* 当前可用许可数量
* @return int
*/
public int availablePermits(){
return semaphore.availablePermits();
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 23:01
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : LoggingConfigurator.java
* explain : 学习 类
**/
package MediatorPattern.infrastructure.logging;
import java.io.File;
import java.io.IOException;
import java.nio.file.Paths;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.logging.*;
/**
* 日志配置器:按日期创建文件夹,按日志等级分文件;控制台+文件双输出
* Logs/yyyy-MM-dd/app-info.log、app-error.log、app-warn.log、app-debug.log
*/
public class LoggingConfigurator {
/**
* 初始化日志系统
*/
public static void configure(){
Logger rootLogger = Logger.getLogger("");
rootLogger.setUseParentHandlers(false);
for(Handler h : rootLogger.getHandlers()){
rootLogger.removeHandler(h);
}
LocalDate today = LocalDate.now();
String dateFolderName = today.format(DateTimeFormatter.ISO_LOCAL_DATE);
File logBaseDir = Paths.get("Logs", dateFolderName).toFile();
if(!logBaseDir.exists()){
logBaseDir.mkdirs();
}
UniformLogFormatter logFormatter = new UniformLogFormatter();
//控制台输出
ConsoleHandler consoleHandler = new ConsoleHandler();
consoleHandler.setFormatter(logFormatter);
consoleHandler.setLevel(Level.ALL);
rootLogger.addHandler(consoleHandler);
try {
//INFO日志文件
FileHandler infoHandler = new FileHandler(new File(logBaseDir,"app-info.log").getAbsolutePath(), true);
infoHandler.setFormatter(logFormatter);
infoHandler.setLevel(Level.INFO);
rootLogger.addHandler(infoHandler);
//WARN日志文件
FileHandler warnHandler = new FileHandler(new File(logBaseDir,"app-warn.log").getAbsolutePath(), true);
warnHandler.setFormatter(logFormatter);
warnHandler.setLevel(Level.WARNING);
rootLogger.addHandler(warnHandler);
//ERROR日志文件
FileHandler errorHandler = new FileHandler(new File(logBaseDir,"app-error.log").getAbsolutePath(), true);
errorHandler.setFormatter(logFormatter);
errorHandler.setLevel(Level.SEVERE);
rootLogger.addHandler(errorHandler);
//DEBUG日志文件
FileHandler debugHandler = new FileHandler(new File(logBaseDir,"app-debug.log").getAbsolutePath(), true);
debugHandler.setFormatter(logFormatter);
debugHandler.setLevel(Level.FINE);
rootLogger.addHandler(debugHandler);
} catch (IOException e) {
e.printStackTrace();
}
rootLogger.setLevel(Level.ALL);
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 23:01
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : UniformLogFormatter.java
* explain : 学习 类
**/
package MediatorPattern.infrastructure.logging;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.logging.Formatter;
import java.util.logging.LogRecord;
/**
* 统一日志格式化器,控制台与文件输出格式保持完全一致
*/
public class UniformLogFormatter extends Formatter {
private static final DateTimeFormatter dtFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
@Override
public String format(LogRecord record) {
LocalDateTime dt = LocalDateTime.now();
StringBuilder sb = new StringBuilder();
sb.append(dt.format(dtFormatter));
sb.append(" [").append(record.getLevel()).append("] ");
sb.append("Thread:").append(Thread.currentThread().getName()).append(" ");
sb.append(record.getSourceClassName()).append("#").append(record.getSourceMethodName());
sb.append(" | ").append(formatMessage(record));
sb.append(System.lineSeparator());
if(record.getThrown() != null){
Throwable t = record.getThrown();
sb.append(t.getMessage()).append(System.lineSeparator());
for(StackTraceElement ste : t.getStackTrace()){
sb.append("\t").append(ste.toString()).append(System.lineSeparator());
}
}
return sb.toString();
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 23:01
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : InMemoryMessageRepository.java
* explain : 学习 类
**/
package MediatorPattern.infrastructure.repository;
import MediatorPattern.core.dto.JewelBusinessMessageDto;
import MediatorPattern.core.interfaces.IMessageRepository;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
/**
* 内存版消息仓储实现,线程安全,ConcurrentHashMap存储
*/
public class InMemoryMessageRepository implements IMessageRepository {
private final ConcurrentHashMap<UUID, List<JewelBusinessMessageDto>> store;
public InMemoryMessageRepository() {
store = new ConcurrentHashMap<>();
}
@Override
public void save(JewelBusinessMessageDto dto) {
UUID bid = dto.getBusinessId();
store.computeIfAbsent(bid, k -> new ArrayList<>()).add(dto);
}
@Override
public List<JewelBusinessMessageDto> findByBusinessId(UUID businessId) {
return store.getOrDefault(businessId, new ArrayList<>());
}
@Override
public List<JewelBusinessMessageDto> findAll() {
List<JewelBusinessMessageDto> all = new ArrayList<>();
store.values().forEach(all::addAll);
return all;
}
@Override
public void deleteByBusinessId(UUID businessId) {
store.remove(businessId);
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 23:01
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : ResiliencePolicy.java
* explain : 学习 类
**/
package MediatorPattern.infrastructure.resilience;
import MediatorPattern.core.enums.CircuitBreakerState;
import MediatorPattern.core.interfaces.IResiliencePolicy;
import MediatorPattern.core.options.ResiliencePolicyOptions;
import java.util.function.Supplier;
/**
* 弹性策略实现:重试+熔断器,线程安全
*/
public class ResiliencePolicy implements IResiliencePolicy {
private final ResiliencePolicyOptions options;
private volatile CircuitBreakerState circuitState;
private volatile int failCounter;
private volatile long halfOpenTriggerTime;
public ResiliencePolicy(ResiliencePolicyOptions options) {
this.options = options;
this.circuitState = CircuitBreakerState.CLOSED;
this.failCounter = 0;
}
@Override
public CircuitBreakerState getCircuitState() {
return circuitState;
}
@Override
public <T> T executeWithPolicy(Supplier<T> supplier) throws Exception {
int attempt = 0;
while(true){
checkCircuit();
try {
T result = supplier.get();
onSuccess();
return result;
}catch (Throwable ex){
attempt++;
onFail();
if(attempt > options.getMaxRetryTimes()){
throw new Exception("执行失败,达到最大重试次数", ex);
}
Thread.sleep(options.getRetrySleepMs());
}
}
}
private void checkCircuit(){
long now = System.currentTimeMillis();
if(circuitState == CircuitBreakerState.OPEN){
if(now >= halfOpenTriggerTime){
circuitState = CircuitBreakerState.HALF_OPEN;
}
}
}
private void onSuccess(){
failCounter = 0;
if(circuitState == CircuitBreakerState.HALF_OPEN){
circuitState = CircuitBreakerState.CLOSED;
}
}
private void onFail(){
failCounter++;
if(circuitState == CircuitBreakerState.CLOSED && failCounter >= options.getCircuitBreakerFailThreshold()){
circuitState = CircuitBreakerState.OPEN;
halfOpenTriggerTime = System.currentTimeMillis() + options.getCircuitBreakerWaitHalfOpenMs();
}
}
}
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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/9/6 - 23:02
* User : geovindu
* Product : IntelliJ IDEA
* Project : javadesginpattern
* File : InMemoryRetryMessageQueue.java
* explain : 学习 类
**/
package MediatorPattern.infrastructure.retryqueue;
import MediatorPattern.core.dto.JewelBusinessMessageDto;
import MediatorPattern.core.interfaces.IRetryMessageQueue;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
/**
* 内存重试队列实现,线程安全,LinkedBlockingQueue
*/
public class InMemoryRetryMessageQueue implements IRetryMessageQueue {
private final BlockingQueue<JewelBusinessMessageDto> queue;
public InMemoryRetryMessageQueue() {
queue = new LinkedBlockingQueue<>();
}
@Override
public void enqueue(JewelBusinessMessageDto dto, int retryCount) {
dto.setRemark(dto.getRemark() + "|retry:" + retryCount);
queue.offer(dto);
}
@Override
public List<JewelBusinessMessageDto> dequeuePending(int batchSize) {
List<JewelBusinessMessageDto> list = new ArrayList<>();
for(int i=0;i<batchSize;i++){
JewelBusinessMessageDto item = queue.poll();
if(item == null){
break;
}
list.add(item);
}
return list;
}
@Override
public int getQueueSize() {
return queue.size();
}
@Override
public void clear() {
queue.clear();
}
}
调用:
/**
* encoding: utf-8
* 版权所有 2026 ©涂聚文有限公司 ®
* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
* 描述:中介者行为模式 Mediator Pattern 行为模式 Behavioral Patterns
* 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 : MediatorBll.java
* explain : 学习 类
**/
package BLL;
import MediatorPattern.application.scheduler.JewelFlowScheduler;
import MediatorPattern.extensions.ServiceCollectionExtensions;
import MediatorPattern.infrastructure.logging.LoggingConfigurator;
import java.util.UUID;
public class MediatorBll {
public void demo(){
//初始化日志系统,按日期文件夹、按等级分日志文件
LoggingConfigurator.configure();
//组装全部组件
JewelFlowScheduler scheduler = ServiceCollectionExtensions.buildAllComponents();
//启动后台轮询调度
scheduler.start();
//模拟提交一条珠宝业务,target=0广播全部部门
UUID businessId = UUID.randomUUID();
scheduler.submitBusinessMessage(businessId, 0, "珠宝原料采购业务开始流转");
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
scheduler.stop();
}
}
输出:

哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
浙公网安备 33010602011771号