知识卡片

拦截器链全员执行与责任链一节点即止的关键差异

普通读书笔记卡 · 1988.a.6

内容

MVC框架拦截器链表面是责任链模式结构(节点链式串联、依次委托),但传递语义相反: 责任链假设一个节点处理完就可结束;拦截器链要求每个拦截器都必须依次执行一遍,因各自 负责不同横切关注点(权限、日志),业务要求都生效。发散:两段代码结构相同,传递协议 (”谁处理就停”vs”全部都要处理”)可能完全相反,不能只看类图形状判定是同一模式。

参考来源

- 位置:《设计模式之禅(第2版)》第37章《MVC框架》37.1.2节(源文件:_epub-src/text/part0159.html) - 结论依据:原文明确指出"拦截器链中的intercept方法行为是委托第一个节点拦截器的intercept方法,然后所有的拦截器都会按照顺序执行一遍,这一点和我们的责任链模式是不同的,责任链模式是只要有节点处理就可以认为是结束,后续节点可以不再参与处理"。 - 原始内容:再看intercept方法,链中每个节点都是一个拦截器,都有一个intercept方法,拦截器链中的intercept方法行为是委托第一个节点拦截器的intercept方法,然后所有的拦截器都会按照顺序执行一遍,这一点和我们的责任链模式是不同的,责任链模式是只要有节点处理就可以认为是结束,后续节点可以不再参与处理。