责任链模式
2019-11-10 19:28:21 by冲冲
1、概念
案例:员工要报销8000元,公司规定2000元以下不用签字,2000~5000元需要部门主管签字,5000元以上需要总裁签字。
设计:三个审批人应该继承同一个抽象类,抽象类定义两个方法。①报销签字方法approve(),②审批人持有上层领导的引用,如果自己不能处理则提交领导处理setApprover()。
特点:审批人(环)只懂自己怎么审批(责任),处理不了的就递交给上层(链条)。
2、完整代码
1 abstract class Approver {// 审批人抽象类 2 protected String name;// 抽象出审批人的姓名。 3 protected Approver nextApprover;// 下一个审批人,更高级别领导。 4 public Approver(String name) { 5 this.name = name; 6 } 7 protected Approver setNextApprover(Approver nextApprover) { 8 this.nextApprover = nextApprover; 9 return this.nextApprover;// 返回下个审批人,链式编程。 10 } 11 public abstract void approve(int amount);// 抽象审批方法由具体审批人子类实现 12 } 13 14 class Staff extends Approver { 15 public Staff(String name) { 16 super(name); 17 } 18 @Override 19 public void approve(int amount) { 20 if (amount <= 1000) { 21 System.out.println("审批通过。【员工:" + name + "】"); 22 } else { 23 System.out.println("无权审批,升级处理。【员工:" + name + "】"); 24 this.nextApprover.approve(amount); 25 } 26 } 27 } 28 29 class Manager extends Approver { 30 public Manager(String name) { 31 super(name); 32 } 33 @Override 34 public void approve(int amount) { 35 if (amount <= 5000) { 36 System.out.println("审批通过。【经理:" + name + "】"); 37 } else { 38 System.out.println("无权审批,升级处理。【经理:" + name + "】"); 39 this.nextApprover.approve(amount); 40 } 41 } 42 } 43 44 class CEO extends Approver { 45 public CEO(String name) { 46 super(name); 47 } 48 @Override 49 public void approve(int amount) { 50 if (amount <= 10000) { 51 System.out.println("审批通过。【CEO:" + name + "】"); 52 } else { 53 System.out.println("驳回申请。【CEO:" + name + "】"); 54 } 55 } 56 } 57 58 public class Chain { 59 public static void main(String[] args) { 60 Approver ring = new Staff("张飞"); 61 ring.setNextApprover(new Manager("关羽")).setNextApprover(new CEO("刘备")); 62 63 //高层接触不到也没必要接触,直接找员工张飞审批。 64 ring.approve(1000); 65 /*********************** 66 审批通过。【员工:张飞】 67 ***********************/ 68 69 ring.approve(4000); 70 /*********************** 71 无权审批,升级处理。【员工:张飞】 72 审批通过。【经理:关羽】 73 ***********************/ 74 75 ring.approve(9000); 76 /*********************** 77 无权审批,升级处理。【员工:张飞】 78 无权审批,升级处理。【经理:关羽】 79 审批通过。【CEO:刘备】 80 ***********************/ 81 82 ring.approve(88000); 83 /*********************** 84 无权审批,升级处理。【员工:张飞】 85 无权审批,升级处理。【经理:关羽】 86 驳回申请。【CEO:刘备】 87 ***********************/ 88 } 89 }