责任链模式是一种对象的行为模式。通俗的说,就是多个处理者对象链成一条链,请求在这条链上传递,知道某个对象处理此请求。
一个简单的实现示例如下:
处理方法:
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与模式》之责任链模式