职责链模式:模拟订单审批流程
首先,定义一个订单类,包括订单号、订单金额等信息:
public class Order {
private String orderId;
private double amount;
public Order(String orderId, double amount) {
this.orderId = orderId;
this.amount = amount;
}
public String getOrderId() {
return orderId;
}
public double getAmount() {
return amount;
}
}
接下来,定义一个处理器接口,包含处理订单的方法和设置下一个处理器的方法:
public interface OrderHandler {
void handle(Order order);
void setNext(OrderHandler next);
}
然后,实现初审处理器、终审处理器和财务处理器:
public class FirstApprovalHandler implements OrderHandler {
private OrderHandler next;
@Override
public void handle(Order order) {
if (order.getAmount() <= 1000) {
System.out.println('初审通过,订单号:' + order.getOrderId());
if (next != null) {
next.handle(order);
}
} else {
System.out.println('初审不通过,订单号:' + order.getOrderId());
}
}
@Override
public void setNext(OrderHandler next) {
this.next = next;
}
}
public class FinalApprovalHandler implements OrderHandler {
private OrderHandler next;
@Override
public void handle(Order order) {
if (order.getAmount() <= 5000) {
System.out.println('终审通过,订单号:' + order.getOrderId());
if (next != null) {
next.handle(order);
}
} else {
System.out.println('终审不通过,订单号:' + order.getOrderId());
}
}
@Override
public void setNext(OrderHandler next) {
this.next = next;
}
}
public class FinanceHandler implements OrderHandler {
@Override
public void handle(Order order) {
System.out.println('财务处理订单,订单号:' + order.getOrderId() + ',金额:' + order.getAmount());
}
@Override
public void setNext(OrderHandler next) {
// 最后一个处理器,不需要设置下一个处理器
}
}
最后,将处理器串成一条链:
public class OrderProcess {
public static void main(String[] args) {
OrderHandler firstHandler = new FirstApprovalHandler();
OrderHandler finalHandler = new FinalApprovalHandler();
OrderHandler financeHandler = new FinanceHandler();
firstHandler.setNext(finalHandler);
finalHandler.setNext(financeHandler);
Order order1 = new Order('2021010101', 800);
Order order2 = new Order('2021010102', 2500);
Order order3 = new Order('2021010103', 6000);
firstHandler.handle(order1);
firstHandler.handle(order2);
firstHandler.handle(order3);
}
}
运行结果如下:
初审通过,订单号:2021010101
终审通过,订单号:2021010101
财务处理订单,订单号:2021010101,金额:800.0
初审通过,订单号:2021010102
终审通过,订单号:2021010102
财务处理订单,订单号:2021010102,金额:2500.0
初审通过,订单号:2021010103
终审不通过,订单号:2021010103
原文地址: https://www.cveoy.top/t/topic/n2tr 著作权归作者所有。请勿转载和采集!