假設公司請假流程,需要三天需要經理簽核、五天需要副理,七天以上需要副總批准。我們需要使用責任鏈模式,物件會根據每個鏈結去執行,等待可以處理的鏈結才會停止。
責任鏈定義
對同一個事件作多個物件處理,這些物件會串成一個責任鏈,負責處理輸入的事件
責任鏈作用
- 當需要動態處理鏈結的處理需求
- 一連串流程處理
責任鏈範例
公司出差有規定當出差金額1千元以下經理簽核就可以,但是超過1萬元以上需要副總,超過1萬元為總經理和核准。
/** * name: IProcessHandler.java * Description : 管理者簽核處理-抽象 * Created by bryant on 2017/1/22. */ public abstract class IProcessHandler { protected IProcessHandler nextHandler; protected BigDecimal money ; public final void handler(BigDecimal money){ this.money = money; info(); if(money.compareTo(getLimit())==1){ this.nextHandler.handler(money); } } public abstract BigDecimal getLimit(); public abstract void info(); }
/** * name: ManagerHandler.java * Description : 經理簽核 * Created by bryant on 2017/1/22. */ public class ManagerHandler extends IProcessHandler{ @Override public BigDecimal getLimit() { return new BigDecimal("1000"); } @Override public void info() { System.out.println("經理核准"); } }
/** * name: ManagerHandler.java * Description : 副總 * Created by bryant on 2017/1/22. */ public class ViceGeneralManger extends IProcessHandler { @Override public BigDecimal getLimit() { return new BigDecimal("10000"); } @Override public void info() { System.out.println("副總核准"); } }
/** * name: ManagerHandler.java * Description : 總經理 * Created by bryant on 2017/1/22. */ public class GeneralMangerHandler extends IProcessHandler { @Override public BigDecimal getLimit() { return new BigDecimal("100000"); } @Override public void info() { System.out.println("總經理核准"); } }
/** * name: ManagerHandler.java * Description : 簽核demo * Created by bryant on 2017/1/22. */ public class ManagerDemo { public static void main(String[] args){ ManagerHandler managerHandler = new ManagerHandler(); ViceGeneralManger viceGeneralManager = new ViceGeneralManger() ; GeneralMangerHandler generalManger = new GeneralMangerHandler(); managerHandler.nextHandler = viceGeneralManager; viceGeneralManager.nextHandler= generalManger; managerHandler.handler(new BigDecimal(100000)); } }
結果:
經理核准
副總核准
總經理核准
留言
張貼留言