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

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. 结合使用

    • 工厂模式负责创建和管理责任链的构建过程
    • 责任链模式处理实际的业务逻辑流程
    • 这种组合提供了灵活性和可扩展性
相关推荐
码事漫谈21 小时前
【精华】C++成员初始化列表完全指南:为什么、何时以及如何正确使用
后端
码事漫谈1 天前
C++ 强制类型转换:类型安全的多维工具
后端
RainbowSea1 天前
github 仓库主页美化定制
后端
RainbowSea1 天前
从 Spring Boot 2.x 到 3.5.x + JDK21:一次完整的生产环境迁移实战
java·spring boot·后端
笨手笨脚の1 天前
Spring Core常见错误及解决方案
java·后端·spring
计算机毕设匠心工作室1 天前
【python大数据毕设实战】全球大学排名数据可视化分析系统、Hadoop、计算机毕业设计、包括数据爬取、数据分析、数据可视化、机器学习、实战教学
后端·python·mysql
VX:Fegn08951 天前
计算机毕业设计|基于Java人力资源管理系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot·后端·课程设计
荔枝hu1 天前
springboot和shiro组合引入SseEmitter的一些坑
java·spring boot·后端·sseeitter
老华带你飞1 天前
健身房|基于springboot + vue健身房管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
不会写DN1 天前
存储管理在开发中有哪些应用?
前端·后端