基本概念
当一个请求可能需要被多个对象处理时,我们可以将这些处理对象链成一条链,并在这条链上传递该请求,直到该请求被处理完毕,这种设计模式就叫做责任链设计模式。
原理与实现
场景模拟:
公司的报销流程如下:由员工在OA系统填写报销申请单,申请单提交给该员工的上一级审批,如果审核金额超出了该上级的审批范围,则由该上级审批后再继续提交给该上级的上级进行审批,以此类推,直到公司最高领导人,如果金额过于巨大则需召开董事会进行商议审批。
以上场景如果我们用责任链设计模式可以做如下设计
Approver.java
//审核者抽象对象,所有的审批者都继承于该对象
abstract class Approver {
//下一审批者
protected Approver nextApprover;
public void setNextApprover(Approver nextApprover){
this.nextApprover = nextApprover;
}
//根据业务需求处理请求
abstract public void processRequest(PurchaseRequest request);
}
//经理
class Manager extends Approver {
//设置审批金额上限
private final double APPROVE_LIMIT = 1000;
public void processRequest(PurchaseRequest request ) {
System.out.println("申请单已经转发给经理审批,请耐心等待!");
System.out.println("经理审批中.......");
System.out.println("你的申请单已经过经理的审批");
if( request.getMoney() <= APPROVE_LIMIT ){
System.out.println("恭喜你,该申请单顺利通过公司领导的审批");
}
else{
System.out.println("申请金额超出1000元,将自动转发给上一级继续审批