【注意】最后更新于 January 18, 2018,文中内容可能已过时,请谨慎使用。
本文来讨论下java设计模式之责任链模式。
这个很好理解,就是踢皮球嘛,我解决不了,找下一个人去解决。反正总要给你找到一个人来解决。
为了找到解决的人,我们得知道事件等级,才能找到对应的人来解决。
如果这个人解决不了,下一个人来解决。责任链就出来了。
比如,我们有个新闻.
1
2
3
4
5
6
7
8
9
10
11
12
|
package top.txiner.chainofresponsibility;
/**
* @author : hundred
* time: 18-1-18
* website : http://txiner.top
* 懵懂的小白
*/
public interface News {
int getLevel();
String getReport();
}
|
所有的新闻无外乎有这两个属性,新闻严重程度,新闻内容。比如出车祸的新闻
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public class Hurt implements News {
private int level;
private String report;
public Hurt(int level, String report) {
this.level = level;
this.report = report;
}
@Override
public int getLevel() {
return level;
}
@Override
public String getReport() {
return report;
}
}
|
不复杂的事件。既然新闻出来啦,那么就得有媒体来决定用什么样的事件来处理。比如普通事故?还是娱乐新闻?抑或政治新闻?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public abstract class Handler {
private Handler next;
private int level;
public Handler(int level) {
this.level = level;
}
public void handleNews(News news){
if (news.getLevel()==this.level){
this.report(news);
}else {
this.next.handleNews(news);
}
}
public void setNext(Handler handler){
this.next=handler;
}
public abstract void report(News news);
}
|
看,内容不复杂,这个板块不能报道,我就转给下个板块来报道。我们看看这几家板块吧。
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
|
public class Life extends Handler {
public Life(int level) {
super(level);
}
@Override
public void report(News news){
System.out.println("Life handle news");
System.out.println(news.getReport());
}
}
public class Entertainment extends Handler {
public Entertainment(int level) {
super(level);
}
@Override
public void report(News news) {
System.out.println("One star gets hurt");
System.out.println(news.getReport());
}
}
public class Politics extends Handler {
public Politics(int level) {
super(level);
}
@Override
public void report(News news) {
System.out.println("One officer gets hurt");
System.out.println(news.getReport());
}
}
|
好了,有记者上战场啦,看看问题!
1
2
3
4
5
6
7
8
9
10
11
12
|
public class Reporter {
public static void main(String[] args) {
News news=new Hurt(3,"one hit by a car");
Handler life=new Life(1);
Handler ent=new Entertainment(2);
Handler politics=new Politics(3);
life.setNext(ent);
ent.setNext(politics);
life.handleNews(news);
}
}
|
问题得解!
.......................分割线.........................
责任链呢,屏蔽了解决问题的内部流程,作为一个请求者,不用知道问题是谁解决的。但是,如果出了问题,像调试起来很麻烦。