责任链模式示例业务场景
当我想请假的时候,我跟我的组长说我要请一天假。组长直接回复说去吧。
后来,回家有点事处理,需要请三天假,我跟我的组长去说,他说,他说我帮你跟总监说一下。需要总监批准才可以。
再后来,由于生病需要住院手术。需要请半个月的假。组长向总监请示了之后,总监说他要向总经理请示一下。
类似这样的审批,当某一级权限不足的时候,主动委托到上一级去审批。
责任链代码
处理抽象类
package com.demo.test.chainOfResponsibility.iml;
public abstract class Handle {
private Handle handle;
public void setHandle(Handle handle) {
this.handle = handle;
}
public Handle getHandle() {
return handle;
}
public abstract void handleRequest(int i);
}
具体处理类1(组长)
import com.demo.test.chainOfResponsibility.iml.Handle;
public class Level1Handle extends Handle {
@Override
public void handleRequest(int i) {
if(i < 3){
System.out.println("组长批准了我"+i+"天假期。");
}else{
if(getHandle() != null){
getHandle().handleRequest(i);
}else{
System.out.println("完了,找不到人批准了");
}
}
}
}
具体抽象类2(总监)
package com.demo.test.chainOfResponsibility;
import com.demo.test.chainOfResponsibility.iml.Handle;
public class Level2Handle extends Handle {
@Override
public void handleRequest(int i) {
if(i >= 3 && i <= 5){
System.out.println("总监批准了我"+i+"天假期。");
}else{
if(getHandle() != null){
getHandle().handleRequest(i);
}else{
System.out.println("完了,找不到人批准了");
}
}
}
}
具体抽象类3(总经理)
package com.demo.test.chainOfResponsibility;
import com.demo.test.chainOfResponsibility.iml.Handle;
public class Level3Handle extends Handle {
@Override
public void handleRequest(int i) {
if(i > 5 ){
System.out.println("总经理批准了我"+i+"天假期。");
}else{
if(getHandle() != null){
getHandle().handleRequest(i);
}else{
System.out.println("完了,找不到人批准了");
}
}
}
}
客户端
package com.demo.test.chainOfResponsibility;
import com.demo.test.chainOfResponsibility.iml.Handle;
public class Client {
public static void main(String[] agr){
Handle level1Handle = new Level1Handle();
Handle level2Handle = new Level2Handle();
Handle level3Handle = new Level3Handle();
level1Handle.setHandle(level2Handle);
level2Handle.setHandle(level3Handle);
level1Handle.handleRequest(10);
}
}
总结
责任链模式 在客户端使用方面可以自由组合下一级审批,方便扩展开发。