某企业的SCM(Supply Chain Management,供应链管理)系统中包含一个采购审批子系统。该企业的采购审批是分级进行的,即根据采购金额的不同由不同层次的主管人员来审批,主任可以审批5万元以下(不包括5万元)的采购单,副董事长可以审批5万元至10万元(不包括10万元)的采购单,董事长可以审批10万元至50万元(不包括50万元)的采购单,50万元及以上的采购单就需要开董事会讨论决定。如何使用职责链模式设计并实现该系统。
1条回答 默认 最新
关注 方案来自 梦想橡皮擦 狂飙组基于 GPT 编写的 “程秘”
在该企业的SCM系统中,采购审批子系统是一个典型的职责链场景,可以使用职责链模式进行设计和实现。
首先,定义一个采购审批处理器抽象类,其中包含审批处理器的共同行为,例如审批处理器的名称、处理请求的方法等。代码如下:
abstract class PurchaseHandler { private String name; // 审批处理器的名称 private PurchaseHandler successor; // 下一个处理器 public PurchaseHandler(String name) { this.name = name; } public void setSuccessor(PurchaseHandler successor) { this.successor = successor; } // 处理请求的方法 public abstract void handleRequest(PurchaseRequest request); // 获取处理器名称的方法 public String getName() { return name; } }
接下来,定义具体的采购审批处理器类,分别对应不同层次的主管人员。对于每个处理器类,重写handleRequest方法,如果采购单金额小于当前处理器能够审批的金额上限,则进行审批操作;否则,将采购单转发给下一个处理器进行处理。代码如下:
class Director extends PurchaseHandler { private final double LIMIT = 50000.0; // 主任能够审批的金额上限 public Director(String name) { super(name); } @Override public void handleRequest(PurchaseRequest request) { if (request.getAmount() < LIMIT) { System.out.println(getName() + "审批采购单:" + request); } else { successor.handleRequest(request); } } } class VicePresident extends PurchaseHandler { private final double LIMIT = 100000.0; // 副董事长能够审批的金额上限 public VicePresident(String name) { super(name); } @Override public void handleRequest(PurchaseRequest request) { if (request.getAmount() >= LIMIT && request.getAmount() < 500000.0) { System.out.println(getName() + "审批采购单:" + request); } else { successor.handleRequest(request); } } } class President extends PurchaseHandler { private final double LIMIT = 500000.0; // 董事长能够审批的金额上限 public President(String name) { super(name); } @Override public void handleRequest(PurchaseRequest request) { if (request.getAmount() >= LIMIT && request.getAmount() < 1000000.0) { System.out.println(getName() + "审批采购单:" + request); } else { successor.handleRequest(request); } } } class BoardOfDirectors extends PurchaseHandler { public BoardOfDirectors(String name) { super(name); } @Override public void handleRequest(PurchaseRequest request) { if (request.getAmount() >= 1000000.0) { System.out.println(getName() + "审批采购单:" + request); } else { System.out.println("无法处理采购单:" + request); } } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 Windows Script Host 无法找到脚本文件"C:\ProgramData\Player800\Cotrl.vbs”
- ¥15 matlab自定义损失函数
- ¥15 35114 SVAC视频验签的问题
- ¥15 impedancepy
- ¥15 求往届大挑得奖作品(ppt…)
- ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
- ¥50 浦育平台scratch图形化编程
- ¥20 求这个的原理图 只要原理图
- ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
- ¥20 微信的店铺小程序如何修改背景图