当前位置:   article > 正文

设计模式8——责任链模式 Chain of Responsibility模式_java里responsibility-driven design什么意思

java里responsibility-driven design什么意思

一、举个栗子

我们首先看看什么是推卸责任。假设现在我们去公司领取资料。首先我们向公司前台打听要去哪里领取资料,她告诉我们应该去“营业窗口”。然后等我们到了“营业窗口”后,又被告知应该去“售后部门”。等我们好不容易赶到了“售后部门”,又被告知应该去“资料中心”,因此最后我们又不得不赶到“资料中心”。像这样,在找到合适的办事人之前,我们被不断地赐给一个有一个人,这就是“推卸责任”。

“推卸责任”听起来有些贬义的意思,但是有时候也确实存在需要“推卸责任”的情况。例如,当外部请求程序进行某个处理,但程序暂时无法直接决定由哪个对象负责处理时,就需要推卸责任。这种情况下,我们可以考虑 将多个对象组成一条责任链,然后按照它们在责任链上的顺序一个一个地找出到底应该谁来负责处理。

责任链为请求创建了一个接受者对象的链。这种模式给予请求的类型,对请求的发送者和接收者解耦。这种类型的设计模式属于行为型模式。

在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传递给下一个接收者,以此类推。

二、模式结构

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

责任链模式中的登场角色

  • Handler(处理者)

    • Handler 角色定义了处理请求的接口API。Handler 角色知道“下一个处理者”是谁,如果自己无法处理请求,它会将请求转给“下一个处理者”
  • CncreteHandler(具体的处理者)

    • ConcreteHandler 角色是处理请求的具体角色。

三、实例程序

3.1 Filter接口

在这里插入图片描述

3.2 HTMLFilter类

在这里插入图片描述

3.3 SesitiveFilter类

在这里插入图片描述

3.4 FilterChain 类

在这里插入图片描述

3.5 Request类

在这里插入图片描述

3.6 Response类

在这里插入图片描述

3.7 Main类

在这里插入图片描述

四、实际应用场景

  • JAVA WEB中 Apache Tomcat 对 Encoding 的处理
  • Struts2 的拦截器
  • jsp servlet 的 Filter
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/497891
推荐阅读
相关标签
  

闽ICP备14008679号