三、责任链模式
在日常生活中,责任链模式应用场景多见。比如在公司财务报销,从提请报销起到报销款打款落地终整个流程中,可能要经过不同人的审核,审批、签字、盖章等一系列的节点。实际过程中,提请报销者无需了解整个报销流程,只关注报销结果——钱是否到账。而不是提请报销者,每个节点提个申请。
责任链模式即请求发起处理请求,不管处理对象有多少个,只用发起一次请求会自动沿着责任链走流程,直到被链中某个节点处理完为止。
UML类图:
具体实现过程:
1、抽象处理器:
对于triggerProcess在抽象类中非必须,对于责任链处理什么时候结束判断可以根据实际需要在其他地方实现
2、具体实现类中如何实现handle不介绍了。下面介绍测试方法:
测试结果:
对于测试方法重点介绍 红框中内容,即组责任链。对于测试案例就在测试方法中组链了,这个组链的方式是不是很类似StringBuilder?对的,就是在责任链模式的实际应用中可以与Builder模式结合使用组链。(在类似链表的处理过程中似乎Builder模式的处理比较有优势)
这样处理的优势在于:如果某一责任链比较复杂过长,采用非Builder模式组链就要对组链的方法进行修改,不符合开闭原则。采用Builder模式,则可以解决这一问题。具体后续介绍Builder模式。