0%

设计模式-责任链模式

责任链模式(Chain-of-responsibility),属于行为型模式,包含一个请求和一系列处理这个请求的方法

结构

涉及到了三个角色,Chain(处理者)、ConcreteChain(具体处理者)、Client(客户端)

处理者

Chain,具体处理者的公共接口,示例如下

1
2
3
4
interface Chain {
void setNext(Chain nextInChain);
void process(int request);
}

具体处理者

ConcreteChain,处理请求或传递请求或处理请求后传递,示例如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class NegativeProcessor implements Chain{
private Chain nextInChain;
@Override
public void setNext(Chain nextInChain) {
this.nextInChain = nextInChain;
}

@Override
public void process(int request) {
if(request < 0){
System.out.println("负数" + request);
}
else {
nextInChain.process(request);
}
}
}

public class PositiveProcessor implements Chain{
private Chain nextInChain;
@Override
public void setNext(Chain nextInChain) {
this.nextInChain = nextInChain;
}

@Override
public void process(int request) {
if(request > 0){
System.out.println("正数" + request);
}
else {
nextInChain.process(request);
}
}
}

...

客户端

可以对链进行动态组合,示例如下

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Client {
public static void main(String[] args) {
Chain c1 = new NegativeProcessor();
Chain c2 = new PositiveProcessor();
Chain c3 = new ZeroProcessor();
c1.setNext(c2);
c2.setNext(c3);

c1.process(7);
c1.process(0);
c1.process(-3);
}
}

output:

1
2
3
正数7
零0
负数-3

完整代码

完整代码已上传,项目地址https://github.com/yuan0824/DesignPattern

参考资料