设计模式—责任链设计模式

责任链版本-1

意图:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止

适用性:

  1. 有多个对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定
  2. 你想在不明确接收者的情况下,向多个对象中的一个提交一个请求
  3. 可处理一个请求的对象集合应被动态指定

责任链(Chain of Responsibility)模式的构成:

  1. 传递者接口(Handler):定义一个处理请求的接口,实现链中下一个对象(可选)
  2. 具体传递者(ConcreteHandler):可以访问链中下一个对象,如果可以处理请求,就处理它,否则将请求转发给后继者
  3. 客户端(Client):向链中的对象发出请求

示例如下:

传递者接口:

责任链-传递者接口.png

具体传递者FilterA:

责任链-具体传递者A.png

具体传递者FilterB:

责任链-具体传递者B.png

具体传递者FilterC:

责任链-具体传递者C.png

测试:

责任链-测试.png

控制台:

责任链-console.png

小结:和链表类似每个对象都有一个后继,每个对象都可以决定自己来处理还是由后继来处理

责任链版本-2

Java Web中的过滤器其实就是用到了责任链设计模式,我们这里来简单的模拟一下:

传递者接口:

模拟Filter传递者接口.png

FilterChain接口:

责任链-FilterChain.png

FilterChain实现类:

ApplicationFilterChain.png

MyFilterA:

MyFilterA.png

MyFilterB:

MyFilterB.png

MyFilterC:

MyFilterC.png

测试类:

测数类.png

控制台:

console.png

小结:对比第一版的责任链,它取消了每一个对象都维持后继对象这一特点,而是改用一个数组或集合来进行统一管理,数组或集合被封装进一个ApplicationFilterChain对象,它是FilterChain的实例,对Filter接口方法doFilter增加了一个参数,类型为FilterChain,这样我们就可以通过FilterChain类型的参数来间接获取后继Filter并执行它的doFilter方法,实现请求传递

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容