责任链设计模式,其实就是处理同一个请求的对象连接成一条链,请求的路径经过这条链,符合要求的就处理这个请求,不符合就接着往下面抛出,直道有人处理这条请求。
业务:比如啊,公司个人请假,三天以下就是主管审批,三天以上五天以下就是经理审批,五天以上就是总经理审批。
责任链有两种角色:
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
);
}
}
|
版权声明:原创作品,如需转载,请注明出处。否则将追究法律责任
本文转自 豆芽菜橙 51CTO博客,原文链接:http://blog.51cto.com/shangdc/1917125