假設公司請假流程,需要三天需要經理簽核、五天需要副理,七天以上需要副總批准。我們需要使用責任鏈模式,物件會根據每個鏈結去執行,等待可以處理的鏈結才會停止。
責任鏈定義
對同一個事件作多個物件處理,這些物件會串成一個責任鏈,負責處理輸入的事件
責任鏈作用
- 當需要動態處理鏈結的處理需求
- 一連串流程處理
責任鏈範例
公司出差有規定當出差金額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));
}
}
結果:
經理核准
副總核准
總經理核准
留言
張貼留言