2019-11-10 19:28:21 by沖沖編程
案例:員工要報銷8000元,公司規定2000元如下不用簽字,2000~5000元須要部門主管簽字,5000元以上須要總裁簽字。app
設計:三個審批人應該繼承同一個抽象類,抽象類定義兩個方法。①報銷簽字方法approve(),②審批人持有上層領導的引用,若是本身不能處理則提交領導處理setApprover()。ide
特色:審批人(環)只懂本身怎麼審批(責任),處理不了的就遞交給上層(鏈條)。this
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 }