实验15:职责链模式
[实验任务一]:财务审批
某物资管理系统中物资采购需要分级审批,主任可以审批1万元及以下的采购单,部门经理可以审批5万元及以下的采购单,副总经理可以审批10万元及以下的采购单,总经理可以审批20万元及以下的采购单,20万元以上的采购单需要开职工大会确定。现用职责链模式设计该系统。
实验要求:
1. 提交类图
2. 提交源代码;
package test15;
public class PurchaseRequest {
private int number; // 采购单号
private double amount; // 采购金额
public PurchaseRequest(int number, double amount) {
this.number = number;
this.amount = amount;
}
public int getNumber() {
return number;
}
public double getAmount() {
return amount;
}
}
package test15;
public abstract class Approver {
protected Approver successor; // 后继者
public void setSuccessor(Approver successor) {
this.successor = successor;
}
public abstract void processRequest(PurchaseRequest request);
}
package test15;
public class Director extends Approver {
@Override
public void processRequest(PurchaseRequest request) {
if (request.getAmount() <= 10000) {
System.out.println("主任审批采购单,单号:" + request.getNumber());
} else if (successor != null) {
successor.processRequest(request);
}
}
}
package test15;
public class Manager extends Approver {
@Override
public void processRequest(PurchaseRequest request) {
if (request.getAmount() <= 50000) {
System.out.println("部门经理审批采购单,单号:" + request.getNumber());
} else if (successor != null) {
successor.processRequest(request);
}
}
}
package test15;
public class VicePresident extends Approver {
@Override
public void processRequest(PurchaseRequest request) {
if (request.getAmount() <= 100000) {
System.out.println("副总经理审批采购单,单号:" + request.getNumber());
} else if (successor != null) {
successor.processRequest(request);
}
}
}
package test15;
public class President extends Approver {
@Override
public void processRequest(PurchaseRequest request) {
if (request.getAmount() <= 200000) {
System.out.println("总经理审批采购单,单号:" + request.getNumber());
} else if (successor != null) {
successor.processRequest(request);
}
}
}
package test15;
public class Congress extends Approver {
@Override
public void processRequest(PurchaseRequest request) {
System.out.println("职工大会审批采购单,单号:" + request.getNumber());
}
}
package test15;
public class Main {
public static void main(String[] args) {
Approver director = new Director();
Approver manager = new Manager();
Approver vicePresident = new VicePresident();
Approver president = new President();
Approver congress = new Congress();
director.setSuccessor(manager);
manager.setSuccessor(vicePresident);
vicePresident.setSuccessor(president);
president.setSuccessor(congress);
// 模拟采购流程
PurchaseRequest request1 = new PurchaseRequest(1, 8000);
PurchaseRequest request2 = new PurchaseRequest(2, 30000);
PurchaseRequest request3 = new PurchaseRequest(3, 90000);
PurchaseRequest request4 = new PurchaseRequest(4, 150000);
PurchaseRequest request5 = new PurchaseRequest(5, 250000);
director.processRequest(request1);
director.processRequest(request2);
director.processRequest(request3);
director.processRequest(request4);
director.processRequest(request5);
}
}
3. 注意编程规范。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下