设计模式之责任链模式

Posted by alonealice on 2017-06-21

责任链模式是一种对象的行为模式。通俗的说,就是多个处理者对象链成一条链,请求在这条链上传递,知道某个对象处理此请求。

一个简单的实现示例如下:
处理方法:

1
2
3
4
public abstract class ConcreteHandler {

public abstract void handlerRequest(Handler handler);
}

定义处理者:

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
38
39
40
41
42
43
44
45
46
47
public class ConcreteHandler1 extends ConcreteHandler{

int p=1;
@Override
public void handlerRequest(Handler handler) {
if(handler.i!=p){
handler.handlerRequest();
}else{
Log.d("handler","处理事件");
}
}
}

public class ConcreteHandler2 extends ConcreteHandler{

int p=2;


@Override
public void handlerRequest(Handler handler) {
if(handler.i!=p){
handler.handlerRequest();
}else{
Log.d("handler","处理事件");
}
}
}

public class Handler {

int i;

int position;

List<ConcreteHandler> list;



public void handlerRequest(){
if(list.size()<position){
position++;
list.get(position-1).handlerRequest(this);
}else{
Log.d("handler","无法处理请求");
}
}
}

具体的执行代码如下:

1
2
3
4
5
6
7
List<ConcreteHandler> list=new ArrayList<>();
list.add(new ConcreteHandler1());
list.add(new ConcreteHandler2());
Handler handler=new Handler();
handler.i=2;
handler.list=list;
handler.handlerRequest();

首先是要创建和添加整个处理者链条,添加处理条件,再根据情况依次进行处理。
一个纯的责任链模式要求一个具体的处理者要不能够处理请求,要不把请求传给下个处理者,不允许出现处理者处理了一部分请求后又把请求传给下位的情况,同时,请求也必须能被某个处理者处理,不允许出现请求无法处理的情况。但是在实际的情况中纯的责任链很难找到。

参考文章:
《JAVA与模式》之责任链模式