责任链设计模式,其实就是处理同一个请求的对象连接成一条链,请求的路径经过这条链,符合要求的就处理这个请求,不符合就接着往下面抛出,直道有人处理这条请求。


业务:比如啊,公司个人请假,三天以下就是主管审批,三天以上五天以下就是经理审批,五天以上就是总经理审批。


责任链有两种角色:

1、抽象处理者角色:定义一个处理请求接口,可以设定和返回下一个处理者。

2、具体 处理角色: 具体处理者处理请求或者请求给下家。


下面代码实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
package  com.test3;
//抽象处理类
public  abstract  class  Handler {
private  Handler nextHandler =  null ;
public  Handler getNextHandler() {
return  nextHandler;
}
public  void  setNextHandler(Handler nextHandler) {
this .nextHandler = nextHandler;
}
// 处理请求
public  abstract  void  handleRequest( int  days);
}


1
2
3
4
5
6
7
8
9
10
11
12
13
package  com.test3;
//主观请求
public  class  SubjectiveHandler  extends  Handler{
@Override
public  void  handleRequest( int  days) {
// TODO Auto-generated method stub
if (days <  3 ) {
System.out.println( " 主管审批了" );
} else  {
getNextHandler().handleRequest(days);;
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
package  com.test3;
//经理
public  class  ManagerHandler  extends  Handler {
@Override
public  void  handleRequest( int  days) {
// TODO Auto-generated method stub
if (days >  3 ) {
System.out.println( " 经理审批了" );
} else  {
getNextHandler().handleRequest(days);;
}
}
}
1
2
3
4
5
6
7
8
9
package  com.test3;
//总经理审批
public  class  GeneralManagerHandler  extends  Handler{
@Override
public  void  handleRequest( int  days) {
// TODO Auto-generated method stub
System.out.println( " 总经理审批" );
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
package  com.test3;
public  class  HandlerClient {
public  static  void  main(String[] args) {
Handler handler1 =  new  SubjectiveHandler();
Handler handler2 =  new  ManagerHandler();
Handler handler3 =  new  GeneralManagerHandler();
//责任链
handler1.setNextHandler(handler2);
handler2.setNextHandler(handler3);
//处理
handler1.handleRequest( 4 );
}
}