首先,定义一个订单类,包括订单号、订单金额等信息:

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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录