责任链模式

作者: 土豆有点 | 来源:发表于2018-06-21 21:19 被阅读1次

    1 什么是责任链模式?
    现在模拟一个场景:你是个高中生,有4个小弟A、B、C、D,分别擅长语文、数学、英语、物理,在每次考试中,他们都正好坐在你后面一排,你根据不同的科目把试卷传给相应的小弟,他就会帮你答题,就像下面这样:

    image.png
    这种方式的特点是:(1)你得记住每个小弟擅长哪一科;(2)你和每个小弟都得有联系。放到代码里,“你”和“小弟”之间的耦合度就太高了,如果小弟流动性比较高,岂不是要经常修改“你”,如果项目大一点儿,这种维护工作是很费力不讨好的。

    我们用责任链来优化一下,哪有老大这么操心的,这种事完全可以交给秘书去做嘛,你可以从四个小弟中挑一个秘书(比如你看上了A),以后不管考什么,你都只管把卷子递给A,他如果处理不了,就转交给B,以此类推,直到有人能处理或所有人都处理不了。
    或者再优化一下,添加两个专职秘书DebugHandler(放在责任链的开始,专门负责传递试卷并写日志)和FinalHandler(放在责任链末尾,如果有未处理的任务,就抛异常)。为了使用尽量简单的代码说明问题,下文中的代码均只包含图中的实线路径。

    image.png
    我们观察一下上图,责任链模式的优缺点就显而易见了:

    优点:解藕了请求发送者和N个接收者之间的关系,请求发送者只需要记住第一个节点即可。
    缺点:每发送一次请求,都只有一个节点有实质作用,它之前节点的作用仅仅是让请求传递下去,从性能方面考虑,我们要避免过长的责任链带来的性能损耗。

    参考

    (http://aes.jypc.org/?p=10268)

    相关文章

      网友评论

        本文标题:责任链模式

        本文链接:https://www.haomeiwen.com/subject/aeocyftx.html