【行为型】责任链模式
定义
1
定义:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。
UML图
1
2
3
4
5
6
7
8
9
10
11
12
13
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _
| | | |
| client |---→| AbstractHandler |←---┐
|_ _ _ _ _ _| | requestHandler() | |
|_ _ _ _ _ _ _ _ _| |
↑ ↑ | |
| | |______|
| |
_ _ _ _ _ _ _ _ _|_ _|_ _ _ _ _ _ _ _ _
| | | |
| ConcreteHandlerA | | ConcreteHandlerB |
| requestHandler() | | requestHandler() |
|_ _ _ _ _ _ _ _ _ _| |_ _ _ _ _ _ _ _ _ _|
代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public abstract class Manager{
private Manager manager;
public Manager getManager(){
return manager;
}
public void setHandler(Manager manager){
this.manager = manager;
}
public abstract void handleRequest(String requestContent);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Leader extends Manager{
@implement
public void handleRequest(String requestContent){
if( getHandler() == null ){
System.out.println("Leader agree for request:"+requestContent);
}else{
System.out.println("Leader have no power to handle the request.");
getHandler().handleRequest(requestContent);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class CEO extends Manager{
@implement
public void handleRequest(String requestContent){
if( getHandler() == null ){
System.out.println("CEO agree for request:"+requestContent);
}else{
System.out.println("CEO have no power to handle the request.");
getHandler().handleRequest(requestContent);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Client{
public static void main(String[] args){
Manager leader = new Leader();
Manager ceo = new CEO();
leader.setHandler( ceo );
leader.handleRequest("I'm a leader... I want to increase wages!");
}
}
运行结果:
Leader have no power to handle the request.
CEO agree for request:I'm a leader... I want to increase wages!
应用
1
只有想起加薪水的时候,才会想起责任链模式! -_-#