定义:使多个对象都有机会处理请求,从何避免请求的发送者与接收者之间的耦合关系,将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象能够处理他为止
优点: 可以随时增加或修改处理一个请求的结构
注意:如果请求到达末端还不能处理,就会出现问题
小李刚入职3天,但是由于加班不适应,想请假调休,找到自己的组长,组长说自己最多给批半天假
超过半天找部门经理,超过5天,找总经理
使用责任链模式则可以很好地实现这个需求
组长:只能处理1天的请假
部门经理:可以处理5天以内的请假
总经理:可以处理5天以上的请假
代码设计实现:
Handler 接口,用来处理请假请求
AbstractHandler:抽象定义 每一级审核者, 实现Handler 接口
Handler1,Handler2,:继承自AbstractHandler,实现具体的处理方法
具体代码:
Handler
public interface Handler {
void handle(int request);
}
AbstractHandler:
public abstract class AbstractHandler implements Handler{
private Handler successor;//后继处理者,更高级别的
public Handler getSuccessor() {
return successor;
}
public void setSuccessor(Handler successor) {
this.successor = successor;
}
}
具体的处理者:
Handler1,Handler2
// 组长,处理1天之内的假期
public class Handler1 extends AbstractHandler {
@Override
public void handle(int request) {
if(request<=1){//只能处理1天假期的请求
System.out.println(getClass().toString()+" handling:"+request);
return;
}
//超过半天,交给上级领导批准
getSuccessor().handle(request);
}
}
// 部门经理,5天以下的假期
public class Handler2 extends AbstractHandler{
@Override
public void handle(int request) {
if(request<5){
System.out.println(getClass().toString()+" handling:"+request);
return;
}
getSuccessor().handle(request);
}
}
测试代码:
public class Test {
public static void main(String[] args) {
Handler1 h1=new Handler1();
Handler2 h2=new Handler2();
h1.setSuccessor(h2);
h1.handle(1);// 请假1天
h1.handle(4);//请假4天
}
}
效果: