您的位置:首页 > 大数据 > 人工智能

责任链模式(Chain of Responsibility Pattern)

2017-06-02 18:07 471 查看

责任链模式(Chain of Responsibility Pattern)

概述

责任链模式是行为模式。链是一系列节点的集合,链的节点可以任意拆分重组。将每个节点看做一个对象,每个对象都有不同的处理逻辑,将一个请求从链的头节点出发,沿着链的路径依次传递给每一个节点对象,直至有对象可以处理这个请求为止。

类图



角色

抽象对象(Handler),声明一个请求处理的方法,并保持一个继承者(即下一个处理节点)的引用,请求处理方法的核心思想是,如果满足处理的条件,则由本类来解决,否则交给继承者即下一个处理节点来处理。

具体的对象(ConcreteHandler),实现处理的适用条件(用于判断是本类处理还是下一个节点处理)以及具体的处理逻辑

代码

//Handler.java
public abstract class Handler {
private Handler mSuccessor;
public Handler getSuccessor() {
return mSuccessor;
}
public void setSuccessor(Handler handler) {
this.mSuccessor = handler;
}
public void dispatch(String request) {
if (mSuccessor!= null) {
mSuccessor.handle(request);
}
}
public abstract void handle(String request);
}


//ConcreteHandler1.java
public class ConcreteHandler1 extends Handler {
@Override
public void handle(String request) {
if (request.equals(“c1”)) {
return;
} else {
dispatch(request);
}
}
}


//ConcreteHandler2.java
public class ConcreteHandler2 extends Handler {
@Override
public void handle(String request) {
if (request.equals(“c2”)) {
return;
} else {
dispatch(request);
}
}
}


//Client.java
public class Client {
public static void main(String[] args) {
Handler c1 = new ConcreteHandler1();
Handler c2 = new ConcreteHandler2();
c1.setSuccessor(c2);//设置c1的下一个节点为c2
c1.handle(“c2”);//从c1开始传入请求处理的字符串
}
}


优缺点

缺点:

大部分情况下,每条处理请求需要遍历完整个责任链,如果处理节点过多,必然会影响性能

优点:

允许动态的增加或删除处理节点

增加新的处理请求非常方便

使用场景

字符串处理,如一个字符串需要做多个处理,如去掉非法字符,和谐掉部分词汇,则可以在责任链中处理。

有多个对象可以处理同一个请求,但是具体由哪个来处理在运行期决定。

总结

责任链模式更像一个更加灵活的if/else语句,可以很方便的设置节点顺序,但是这也有风险,设计者必须很清楚前后类的条件判断关系,避免出现循环引用的情况。

Android源码设计模式



平台Android6.0

在Android框架层代码中的责任链模式最经典的莫过于按键的分发(以键盘消息KeyEvent为例)。ViewRootImpl在setView函数会构建上面的责任链,按键从native层分发到WindowInputEventReceiver的onInputEvent中,onInputEvent—>enqueueInputEvent—>doProcessInputEvent—>deliverInputEvent—>NativePreImeInputStage::deliver函数进入责任链进行按键处理。

参考

Android源码设计模式解析与实战

http://blog.csdn.net/zhengzhb/article/details/7568676
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式