职责链模式模拟订单业务处理流程
职责链模式模拟订单业务处理流程
假设某公司的订单业务处理流程如下:
- 当有一笔订单进来,会先在后台通过初审人员进行审批。
- 初审不通过,订单流程结束。
- 初审通过以后,会转给终审人员进行审批。
- 终审不通过,流程结束。
- 终审通过,流转到财务人员进行处理。
职责链模式模拟该场景
我们可以使用职责链模式来模拟该场景。
类图
以下是职责链模式的类图:

其中,
- Order 表示订单类,包含订单号和订单金额两个属性。
- Handler 是抽象处理者类,包含一个指向下一个处理者的引用和一个处理请求的抽象方法。
- FirstHandler、SecondHandler 和 ThirdHandler 是具体处理者类,分别表示初审人员、终审人员和财务人员,实现了处理请求的具体方法。
工作原理
在处理请求时,如果当前处理者能够处理该请求,则处理请求并结束;否则将请求传递给下一个处理者。
代码示例
public class OrderHandlerDemo {
public static void main(String[] args) {
// 创建订单
Order order = new Order(1, 1000);
// 创建处理者链
Handler firstHandler = new FirstHandler();
Handler secondHandler = new SecondHandler();
Handler thirdHandler = new ThirdHandler();
firstHandler.setNextHandler(secondHandler);
secondHandler.setNextHandler(thirdHandler);
// 处理订单
firstHandler.handle(order);
}
}
// 订单类
class Order {
private int orderId;
private double orderAmount;
public Order(int orderId, double orderAmount) {
this.orderId = orderId;
this.orderAmount = orderAmount;
}
public int getOrderId() {
return orderId;
}
public double getOrderAmount() {
return orderAmount;
}
}
// 抽象处理者类
abstract class Handler {
private Handler nextHandler;
public void setNextHandler(Handler nextHandler) {
this.nextHandler = nextHandler;
}
public abstract void handle(Order order);
protected void next(Order order) {
if (nextHandler != null) {
nextHandler.handle(order);
}
}
}
// 初审人员
class FirstHandler extends Handler {
@Override
public void handle(Order order) {
// 模拟初审逻辑
if (order.getOrderAmount() < 1000) {
System.out.println("初审通过!");
next(order);
} else {
System.out.println("初审不通过!");
}
}
}
// 终审人员
class SecondHandler extends Handler {
@Override
public void handle(Order order) {
// 模拟终审逻辑
if (order.getOrderAmount() < 5000) {
System.out.println("终审通过!");
next(order);
} else {
System.out.println("终审不通过!");
}
}
}
// 财务人员
class ThirdHandler extends Handler {
@Override
public void handle(Order order) {
System.out.println("财务人员处理订单!");
}
}
总结
职责链模式是一种非常实用的设计模式,它可以将多个处理者串联起来,形成一个处理链,从而实现对请求的灵活处理。在实际开发中,我们可以根据需要选择合适的处理者来构建处理链,并根据实际情况进行调整。
优点:
- 降低耦合度: 处理者之间相互独立,只需要知道下一个处理者是谁即可,无需关心其他处理者。
- 灵活扩展: 可以根据需要动态地添加或移除处理者,扩展性强。
- 简化流程: 将复杂的处理逻辑分解为多个独立的处理者,简化代码逻辑,提高代码可读性。
缺点:
- 难以调试: 如果处理链过长,调试起来可能会比较麻烦。
- 性能损耗: 处理链中的每个处理者都会消耗一定的性能,如果处理链过长,可能会影响性能。
希望本文能够帮助您更好地理解职责链模式及其应用场景。
原文地址: https://www.cveoy.top/t/topic/n2sC 著作权归作者所有。请勿转载和采集!