责任链模式
将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,如果能则处理,如果不能则传递给链上的下一个对象。
场景
打牌时,轮流出牌;接力赛跑;大学中,奖学金审批;公司中,公文审批。
常见的公司内的请假审批流程:如果请假天数小于3天,主任审批;如果请假天数大于等于3天,小于10天,经理审批;如果大于等于10天,小于30天,总经理审批;如果大于等于30天,则自动拒绝。
责任链模式demo
实现这样一个审批,SCM(Supply Chain Management 供应链管理)系统中,采购审批子系统的设计:
采购金额小于5万,主任审批;
采购金额大于等于5万,小于20万,经理审批;
采购金额大于等于20万,总经理审批。
新建PurchaseRequest类封装采购申请的基本信息(申请人姓名,申请金额,用途);新建一个抽象类Leader,然后主任类Director,经理类Manager,总经理类GeneralManager,代码如下所示。
public class PurchaseRequest {
//申请人姓名
private String empName;
//申请金额
private BigDecimal amount;
//申请原因(用途)
private String reason;
public PurchaseRequest(String empName, BigDecimal amount, String reason) {
this.empName = empName;
this.amount = amount;
this.reason = reason;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public BigDecimal getAmount() {
return amount;
}
public void setAmount(BigDecimal amount) {
this.amount = am