设计模式实战:工厂模式+责任链模式——订单处理流程

java 复制代码
// 1. 定义处理请求的抽象处理器(责任链基础)
abstract class OrderHandler {
    protected OrderHandler nextHandler; // 下一个处理器
    
    public void setNextHandler(OrderHandler nextHandler) {
        this.nextHandler = nextHandler;
    }
    
    abstract void handleRequest(Order order);
}

// 2. 订单实体类
class Order {
    private double amount; // 订单金额
    private String type;   // 订单类型
    
    public Order(double amount, String type) {
        this.amount = amount;
        this.type = type;
    }
    
    public double getAmount() { return amount; }
    public String getType() { return type; }
}

// 3. 具体处理器实现
class PaymentHandler extends OrderHandler {
    @Override
    void handleRequest(Order order) {
        System.out.println("处理支付流程...");
        if (nextHandler != null) {
            nextHandler.handleRequest(order);
        }
    }
}

class InventoryHandler extends OrderHandler {
    @Override
    void handleRequest(Order order) {
        System.out.println("检查库存...");
        if (nextHandler != null) {
            nextHandler.handleRequest(order);
        }
    }
}

class ShippingHandler extends OrderHandler {
    @Override
    void handleRequest(Order order) {
        System.out.println("安排物流配送...");
        if (nextHandler != null) {
            nextHandler.handleRequest(order);
        }
    }
}

// 4. 工厂接口和实现
interface HandlerFactory {
    OrderHandler createHandlerChain();
}

class DefaultHandlerFactory implements HandlerFactory {
    @Override
    public OrderHandler createHandlerChain() {
        // 创建处理器
        OrderHandler payment = new PaymentHandler();
        OrderHandler inventory = new InventoryHandler();
        OrderHandler shipping = new ShippingHandler();
        
        // 构建责任链
        payment.setNextHandler(inventory);
        inventory.setNextHandler(shipping);
        
        return payment; // 返回链头
    }
}

// 5. 测试代码
public class Main {
    public static void main(String[] args) {
        // 使用工厂创建责任链
        HandlerFactory factory = new DefaultHandlerFactory();
        OrderHandler handlerChain = factory.createHandlerChain();
        
        // 创建订单并处理
        Order order = new Order(199.99, "ONLINE");
        handlerChain.handleRequest(order);
    }
}

运行结果:

erlang 复制代码
处理支付流程...
检查库存...
安排物流配送...

代码说明:

  1. 责任链模式

    • OrderHandler 是抽象处理器,定义了链式结构(通过 nextHandler
    • 具体处理器(PaymentHandlerInventoryHandlerShippingHandler)实现具体的处理逻辑
    • 每个处理器可以决定是否将请求传递给下一个处理器
  2. 工厂模式

    • HandlerFactory 接口定义创建责任链的方法
    • DefaultHandlerFactory 实现具体的创建逻辑,负责实例化和组装整个责任链
  3. 结合使用

    • 工厂模式负责创建和管理责任链的构建过程
    • 责任链模式处理实际的业务逻辑流程
    • 这种组合提供了灵活性和可扩展性
相关推荐
用户21411832636028 小时前
Qwen3-Coder 实战!历史人物短视频一键生成,多分镜人物不崩,魔搭直接玩
后端
追逐时光者8 小时前
C#/.NET/.NET Core技术前沿周刊 | 第 54 期(2025年9.8-9.14)
后端·.net
追逐时光者8 小时前
C#/.NET/.NET Core编程技巧练习集,配套详细的文章教程讲解!
后端·.net
AD钙奶-lalala9 小时前
SpringBoot实现WebSocket服务端
spring boot·后端·websocket
moxiaoran57539 小时前
Flask学习笔记(一)
后端·python·flask
你的人类朋友9 小时前
🔒什么是HMAC
后端·安全·程序员
盖世英雄酱5813610 小时前
Read timed out问题 排查
java·数据库·后端
BXCQ_xuan11 小时前
软件工程实践二:Spring Boot 知识回顾
java·spring boot·后端
o0o_-_11 小时前
【go/gopls/mcp】官方gopls内置mcp server使用
开发语言·后端·golang
苏三说技术11 小时前
为什么不建议在 Docker 中跑 MySQL?
后端