# design-demo **Repository Path**: my-source-project/design-demo ## Basic Information - **Project Name**: design-demo - **Description**: 设计模式demo - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-06 - **Last Updated**: 2025-11-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Spring Boot设计模式演示项目 这是一个基于Spring Boot的设计模式演示项目,展示了**两种经典设计模式组合**在实际业务场景中的应用: 1. **模板方法模式 + 责任链模式** - 用于订单/支付业务流程处理 2. **状态机模式 + 观察者模式** - 用于订单状态变更和业务事件处理 ## 🎯 核心设计模式 ### 📋 模式一:模板方法 + 责任链 (Template + Chain) #### 🔧 模板方法模式 定义业务流程的标准骨架,确保每个流程都按照统一的步骤执行: ```mermaid graph TB A[模板方法execute] --> B[前置处理PreProcess] B --> C[主流程MainProcess] C --> D[后置处理AfterProcess] B --> E[处理失败] C --> F[处理失败] E --> G[返回错误结果] F --> G D --> H[返回成功结果] ``` #### ⛓️ 责任链模式 在每个模板步骤内部,使用责任链模式分解复杂的业务逻辑: ```mermaid graph LR subgraph "前置处理链" A1[参数校验] --> A2[安全校验] --> A3[业务规则校验] end subgraph "主流程链" B1[订单创建] --> B2[优惠计算] --> B3[库存扣减] end subgraph "后置处理链" C1[基础后置] --> C2[支付准备] --> C3[积分奖励] end A3 --> B1 B3 --> C1 ``` #### 📁 包结构 ``` templatechain/ ├── chain/ │ ├── core/ # 责任链核心接口 │ │ ├── Business.java # 业务执行接口 │ │ ├── Handle.java # 处理器接口 │ │ └── Template.java # 模板接口 │ └── handle/ # 具体处理器实现 ├── template/ # 模板方法实现 └── service/ # 服务层实现 ``` ### 🔄 模式二:状态机 + 观察者 (StateMachine + Observer) #### 🎰 状态机模式 管理订单的状态转换,确保状态变更的合法性: ```mermaid stateDiagram-v2 [*] --> PENDING: 创建订单 PENDING --> PAID: 支付成功 PENDING --> CANCELLED: 取消订单 PAID --> AUDITED: 审核通过 PAID --> CANCELLED: 审核失败 AUDITED --> SHIPPED: 发货 SHIPPED --> DELIVERED: 确认收货 DELIVERED --> COMPLETED: 交易完成 SHIPPED --> RETURNED: 申请退货 RETURNED --> REFUNDED: 退款完成 ``` #### 👁️ 观察者模式 当订单状态发生变更时,自动通知相关的业务观察者: ```mermaid graph TB A[订单状态变更事件] --> B[状态变更主题Subject] B --> C[库存观察者] B --> D[支付观察者] B --> E[通知观察者] B --> F[积分观察者] C --> G[更新库存状态] D --> H[处理支付状态] E --> I[发送消息通知] F --> J[计算积分奖励] ``` #### 📁 包结构 ``` statemachineobserver/ ├── statemachine/ # 状态机实现 │ ├── OrderEvent.java # 订单事件定义 │ ├── OrderStatus.java # 订单状态定义 │ └── OrderStateMachine.java # 状态机核心逻辑 ├── observer/ # 观察者实现 ├── subject/ # 主题实现 └── service/ # 状态机服务 ``` ## 🔄 完整调用链路 ### 订单创建流程调用链 ```mermaid sequenceDiagram participant C as Controller participant S as OrderService participant T as CreateOrderTemplate participant PC as PreProcessChain participant MC as MainProcessChain participant AC as AfterProcessChain participant SM as StateMachine C->>S: createOrder(input) S->>T: execute(input) T->>PC: execute(input, output) Note over PC: 参数校验→安全校验→业务规则校验 PC-->>T: 返回处理结果 alt 前置处理成功 T->>MC: execute(input, output) Note over MC: 订单创建→优惠计算→库存扣减 MC-->>T: 返回处理结果 alt 主流程成功 T->>AC: execute(input, output) Note over AC: 基础后置→支付准备→积分奖励 AC-->>T: 返回处理结果 T->>SM: 创建初始状态(PENDING) end end T-->>S: 返回最终结果 S-->>C: 返回响应 ``` ### 状态变更流程调用链 ```mermaid sequenceDiagram participant API as External API participant SMS as StateMachineService participant SM as StateMachine participant S as Subject participant O1 as StockObserver participant O2 as PaymentObserver participant O3 as NotificationObserver API->>SMS: triggerStatusChange(orderNo, event) SMS->>SM: processEvent(currentStatus, event) SM-->>SMS: 返回新状态 SMS->>S: notifyStatusChange(orderNo, oldStatus, newStatus) par 并行通知所有观察者 S->>O1: update(orderNo, oldStatus, newStatus) S->>O2: update(orderNo, oldStatus, newStatus) S->>O3: update(orderNo, oldStatus, newStatus) end Note over O1,O3: 各观察者异步处理业务逻辑 ``` ## 🛠️ 技术栈 - **框架**: Spring Boot 2.7.18 - **数据库**: H2 内存数据库 - **持久化**: Spring Data JPA - **构建工具**: Maven - **JDK**: 8+ - **测试框架**: JUnit 5 + Mockito ## 🚀 快速开始 ### 1. 克隆项目 ```bash git clone cd design-demo ``` ### 2. 编译项目 ```bash mvn clean compile ``` ### 3. 运行测试 ```bash mvn test ``` ### 4. 启动应用 ```bash mvn spring-boot:run ``` ### 5. 访问接口 - **健康检查**: `GET http://localhost:8080/api/order/health` - **创建订单**: `POST http://localhost:8080/api/order/create` - **订单状态管理**: `POST http://localhost:8080/api/order/statemachine/trigger/{orderNo}/{event}` - **H2控制台**: `http://localhost:8080/h2-console` ## 📊 项目结构 ``` design-demo/ │ ├── src/main/java/com/example/order/ │ ├── OrderServiceApplication.java # 🚀 Spring Boot启动类 │ │ │ ├── 📋 templatechain/ # 模板+责任链模式 │ │ ├── chain/ │ │ │ ├── core/ # 核心接口 │ │ │ └── handle/ # 具体处理器 │ │ ├── template/ # 模板实现 │ │ └── service/ # 服务层 │ │ │ ├── 🔄 statemachineobserver/ # 状态机+观察者模式 │ │ ├── statemachine/ # 状态机实现 │ │ ├── observer/ # 观察者实现 │ │ ├── subject/ # 主题实现 │ │ └── service/ # 状态机服务 │ │ │ ├── ⚙️ config/ # 配置类 │ ├── 🌐 controller/ # REST控制器 │ ├── 💾 model/ # 数据模型 │ ├── 📁 repository/ # 数据访问层 │ └── 🗺️ service/ # 通用服务接口 │ └── src/test/java/ # 🧪 单元测试 ``` ## 📈 API 示例 ### 订单创建请求 ```bash curl -X POST http://localhost:8080/api/order/create \ -H "Content-Type: application/json" \ -d '{ "userInfo": { "userId": 1001, "userName": "测试用户", "userPhone": "13800138000", "userEmail": "test@example.com" }, "serverInfo": { "serverId": "prod-server-001", "serverName": "生产服务器01", "serverRegion": "华东" }, "orderItems": [ { "productId": 1001, "productName": "商品A", "quantity": 2, "price": 50.00 } ], "remark": "测试订单" }' ``` ### 订单状态变更 ```bash # 支付成功 curl -X POST http://localhost:8080/api/order/statemachine/trigger/ORD1234567890/PAY_SUCCESS # 审核通过 curl -X POST http://localhost:8080/api/order/statemachine/trigger/ORD1234567890/AUDIT_PASS # 发货 curl -X POST http://localhost:8080/api/order/statemachine/trigger/ORD1234567890/SHIP ``` ## 🗺️ 设计模式详解 ### 模板+责任链模式的优势 1. **统一流程**: 模板方法确保所有业务流程遵循相同的执行步骤 2. **灵活扩展**: 责任链允许动态添加或移除处理器 3. **关注点分离**: 每个Handle只关注自己的业务逻辑 4. **容错性**: 单个处理器失败不影响整个流程 ### 状态机+观察者模式的优势 1. **状态管理**: 严格控制状态转换,防止非法状态变更 2. **解耦通知**: 状态变更与业务处理解耦 3. **异步处理**: 观察者可以异步处理业务逻辑 4. **易于扩展**: 新增业务观察者无需修改现有代码 ## 🧪 测试用例 项目包含完整的单元测试,覆盖了两种设计模式的各种场景: - **模板+责任链测试**: `OrderServiceTest` - **状态机+观察者测试**: `OrderStateMachineServiceTest` - **支付流程测试**: `PaymentServiceTest` ## 📚 学习价值 该项目适合以下学习场景: 1. **设计模式学习**: 实际案例展示4种经典设计模式的组合使用 2. **Spring Boot实践**: 现代化的Spring Boot应用架构设计 3. **企业级应用**: 复杂业务流程的组织和管理 4. **测试驱动开发**: 完整的单元测试实践 --- 💡 **记住**: 这不仅仅是一个代码示例,更是一个设计模式在实际项目中的最佳实践指南!