责任链,扫码是链:就是一串接着一串,像自行车链一样。然而在生活中非常的常见,譬如在工厂流水线生产,上一个工序完成,然后才到下一个工序。你去政府企业或者找公司领导签字也都是责任链模模式。以及我开发那种步骤性质的开发,也都是责任链模式的最好适用场景。
设计图
上代码:
执行者
public interface ApprovalResponsibilityChain {
/**
* 下一个生审批者
*/
String nextApproval();
}
public abstract class ResponsibilityChain implements ApprovalResponsibilityChain {
protected int leaveDays;
protected ApprovalResponsibilityChain next;
public ResponsibilityChain(int leaveDays) {
this.leaveDays = leaveDays;
}
abstract public void setNextHandler(ApprovalResponsibilityChain next);
}
public class GroupLeaderApproval extends ResponsibilityChain {
public GroupLeaderApproval(int leaveDays) {
super(leaveDays);
}
@Override
public String nextApproval() {
if(leaveDays < 3) {
return "组长有权审批通过";
}
System.out.print("经过组长审批 ==> ");
return this.next.nextApproval();
}
@Override
public void setNextHandler(ApprovalResponsibilityChain next) {
this.next = next;
}
}
public class DepartmentManagerApproval extends ResponsibilityChain {
public DepartmentManagerApproval(int leaveDays) {
super(leaveDays);
}
@Override
public String nextApproval() {
if(leaveDays <= 5) {
return "部门经理有权限审批通过";
}
System.out.print("经过部门经理审批 ==> ");
return next.nextApproval();
}
@Override
public void setNextHandler(ApprovalResponsibilityChain next) {
this.next = next;
}
}
public class GeneralManagerApproval extends ResponsibilityChain {
public GeneralManagerApproval(int leaveDays) {
super(leaveDays);
}
@Override
public String nextApproval() {
if(leaveDays <= 10) {
return "总经理有权审批通过";
}
System.out.print("经过总经理审批 ==> ");
return next.nextApproval();
}
@Override
public void setNextHandler(ApprovalResponsibilityChain next) {
this.next = next;
}
}
public class BossApproval extends ResponsibilityChain {
public BossApproval(int leaveDays) {
super(leaveDays);
}
@Override
public String nextApproval() {
System.out.println("经过老板审批 ");
if(leaveDays > 10) {
return "老板审批,此事需要特批,审核通过!";
}
return "搞什么,少于10天都要我审批";
}
@Override
public void setNextHandler(ApprovalResponsibilityChain next) {
this.next = next;
}
}
测试:
public static void main(String[] args) {
//员工请假
int leaveDays = 16;//请假天数
ResponsibilityChain group = new GroupLeaderApproval(leaveDays);
ResponsibilityChain departmentManager = new DepartmentManagerApproval(leaveDays);
group.setNextHandler(departmentManager);//指定下一位审批者 部门经理
ResponsibilityChain generalManager = new GeneralManagerApproval(leaveDays);
departmentManager.setNextHandler(generalManager);//指定下一位审批者,总经理
ResponsibilityChain boss = new BossApproval(leaveDays);
generalManager.setNextHandler(boss); //指定下一位审批者,老板
System.out.println(group.nextApproval());
}
运行结果:
经过组长审批 ==> 经过部门经理审批 ==> 经过总经理审批 ==> 经过老板审批
老板审批,此事需要特批,审核通过!
责任链模式优点:
降低了代码的耦合,责任分工明确,程序更加灵活,可动态改变顺序。