java 责任链模式 链表_责任链模式的实现及源码中应用

01

责任链模式的实现

假设一个出差任务的流程需要审批出差行程和出差报销金额。那么,对应两个部门的审核。我们先定义一个出差任务Task类:

57bc42b5a69c5b43f59f92b3562dc95e.png

然后,我们定义一个抽象的处理类Handler,其中具体的处理方法Handle交给子类去实现。

a9f854e6f7cce1008313b20823c91262.png

然后,出差行程的审核者继承了Handler,并实现了其中的Handle方法。其中,处理成功,需要判断是否有下一个Handler,如果有则传递下去。

fba12ee97b9ee9a984aaaf30d6c24934.png

然后继续实现出差金额的审核者MoneyHandler,其处理思路和上面类似。

c37c6e12a8f9e8ebdda8289e2209a747.png

测试类如下,首先创建出差任务。然后在应用层设置处理流程(即有哪几个Handler),然后从第一个流程开始启动。

75e61df7d8004f8c2f3d13e71c61f24f.png

测试结果如下,从测试结果可以看出,正常处理。如果某一个审核不通过,则会终止当前的Handler向下传播。

5b3cfbefb06a22a4c26f45f3b70a3a5d.png

02

Netty中的源码

在Netty中的Pipeline上是基于链表实现的责任链。在Pipeline上添加Handler,最终Handler会在责任链上传递。

f5e08976e45dc039dbbd05b10a84979f.png

13596f7d628b6669e3eaf211fe04d074.png

具体可以参考Netty中的源码。

此外,在Servlet中的Filter也是基于责任链模式实现的,与上面的案例实现方式一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值