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
处理支付流程...
检查库存...
安排物流配送...
代码说明:
-
责任链模式:
OrderHandler
是抽象处理器,定义了链式结构(通过nextHandler
)- 具体处理器(
PaymentHandler
、InventoryHandler
、ShippingHandler
)实现具体的处理逻辑 - 每个处理器可以决定是否将请求传递给下一个处理器
-
工厂模式:
HandlerFactory
接口定义创建责任链的方法DefaultHandlerFactory
实现具体的创建逻辑,负责实例化和组装整个责任链
-
结合使用:
- 工厂模式负责创建和管理责任链的构建过程
- 责任链模式处理实际的业务逻辑流程
- 这种组合提供了灵活性和可扩展性