01
—
责任链模式的实现
假设一个出差任务的流程需要审批出差行程和出差报销金额。那么,对应两个部门的审核。我们先定义一个出差任务Task类:
然后,我们定义一个抽象的处理类Handler,其中具体的处理方法Handle交给子类去实现。
然后,出差行程的审核者继承了Handler,并实现了其中的Handle方法。其中,处理成功,需要判断是否有下一个Handler,如果有则传递下去。
然后继续实现出差金额的审核者MoneyHandler,其处理思路和上面类似。
测试类如下,首先创建出差任务。然后在应用层设置处理流程(即有哪几个Handler),然后从第一个流程开始启动。
测试结果如下,从测试结果可以看出,正常处理。如果某一个审核不通过,则会终止当前的Handler向下传播。
02
—
Netty中的源码
在Netty中的Pipeline上是基于链表实现的责任链。在Pipeline上添加Handler,最终Handler会在责任链上传递。
具体可以参考Netty中的源码。
此外,在Servlet中的Filter也是基于责任链模式实现的,与上面的案例实现方式一致。