java 责任模式_23种设计模式之责任链模式

责任链模式很容易理解,比如说古代的时候,前方战线的信息的传递,首先是前线将军将战况交给通信兵,接下来通信兵不能为当前的状况作出指令,于是乎跑到了京城把信息交给了大臣,大臣也不能做决定,于是又把信息交给了皇帝。最终皇帝处理当前的战况信息。这就是责任链模式。整个的处理过程就像是一条链一样。

一、认识责任链模式

1、概念:

将多个对象通过引用连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。对于客户来说并不知道请求在哪一个环节被处理了。从而实现了请求和处理之间的解耦合。

这条链其实有很多种,比如说就是一条直直的链,或者是一条环形链,再或者是一棵树。

2、类图

我们通过上面的例子来看一下类图

07192fed60b4ac2bc6019762e44d68fa.png

从上图可以看到里面一共涉及到了三个角色:

(1)Handler:抽象处理者。它规范了每一个具体处理者的信息。

(2)ConcreteHandler:具体处理者。可以自己处理,也可以交给自己的下家处理。

(3)Client:客户端。向处理者提交请求对象。

下面我们就代码实现一下:

二、代码实现责任链模式

第一步:抽象处理者

77be265f0fe1a31f1af236f446c8f8b7.png

第二步:指定具体处理者

首先是士兵:

750ff6670861715374253cf1f65fad7e.png

然后是大臣

6244f79d530945bf2142345fc481526f.png

最后是皇帝:

80685cf78b8e773792644a8383f91248.png

这里我们可以发现,我们可以为每一个具体实现者设置下一任继承者,当然到达食物链最顶尖的那个可以不设置。

第三步:客户端调用

c5d27264c89a3658c75019ef53318930.png

我们在这里指定了士兵的下一任处理者是大臣,大臣的下一任处理者是皇帝,没有为皇帝指派下一任处理者,输出来的结果就是这样。不过还有一种情况,也就是五百里加急的情报,士兵可以直接上报给皇帝处理,不经过大臣。这种方式也是可以的。

三、分析责任链模式

优点

1)降低耦合度:客户端不知道请求由哪个处理者处理,而处理者也可以指派任意的继承者去处理。

2)良好的扩展性:我们可以很方便的增加处理者

缺点

1)责任链比较长的时候会影响系统性能。因为中间的处理者可能太多了,就好比贪官把国家拨的钱一层一层搜刮,到最后就剩下一点点了。

2)当出现错误的时候,我们必须按照这个链一层一层去解决处理。

这个责任链模式在实际当中有什么应用呢?最典型的就是Tomcat中的Filter,当然异常处理的设计一般也会用到责任链模式。

OK,责任链模式就是这样。如有问题还请批评指正。

公众号:java的架构师技术栈。专注于从小白到架构师系列的文章,回复关键字可获取各种教程资源和学习路线

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值