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

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

    • 工厂模式负责创建和管理责任链的构建过程
    • 责任链模式处理实际的业务逻辑流程
    • 这种组合提供了灵活性和可扩展性
相关推荐
[email protected]10 分钟前
ASP.NET Core SignalR的基本使用
后端·asp.net·.netcore
yezipi耶不耶2 小时前
Rust入门之并发编程基础(一)
开发语言·后端·rust
bobz9652 小时前
cirros 慢的原因 checking http://169.254.169.254
后端
shangjg32 小时前
Kafka 如何保证不重复消费
java·分布式·后端·kafka
前端snow2 小时前
用cursor写一个微信小程序-购物网站实操
前端·javascript·后端
Mylvzi2 小时前
Spring Boot 中 @RequestParam 和 @RequestPart 的区别详解(含实际项目案例)
java·spring boot·后端
bobz9653 小时前
libvirt unix_sock_dir 控制三种 socket 所在目录
后端
会飞的架狗师4 小时前
【SpringBoot实战】优雅关闭服务
java·spring boot·后端
zeijiershuai5 小时前
SpringBoot Controller接收参数方式, @RequestMapping
java·spring boot·后端
zybsjn5 小时前
后端项目中静态文案国际化语言包构建选型
java·后端·c#