我正在实行一连串责任模式.
我有不同的策略可以组合在一个列表中,我有一个处理器来处理策略列表.每个策略都可以处理CustomInput,并且可以选择是否还应该处理其他策略.
interface Policy { public boolean process(CustomInput input); } interface Processor { public void process(List<Policy> policies,CustomInput input) }
我将实施处理器循环遍历政策列表,并检查每个策略的布尔值结果,以了解是否继续执行其他策略.
我的同事建议通过下一个策略到每个策略,让他们调用(或不)下一个(例如FilterChain).
我的问题如下:
在第二个解决方案中没有看到任何好处(通过下一个策略到当前处理的方案),循环遍历每个策略并检查它的结果?
解决方法
通过下一个的想法对我来说是没有意义的.所以我想要一个链:
A - B - C - D
C如何知道D?如果它在C的代码中,则对链的任何更改将是一个巨大的麻烦来实现.
链条需要遵循已经存在的一些其他路径,例如响应者在他们只是向每个父母(“四人帮”的例子中)提出帮助请求时做的,或者您需要构建链,这就是为什么在Go4部分的底部,他们提到复合模式是一个自然而然的共犯.
请注意,做责任链的主要原因之一是可能对该项目操作的类型不同.这使得用Java中的接口实现它完美.
回答你的主要问题:在这种情况下使用责任链的好处是两个方面:1.你没有做出一个神对象,知道可能发生的一切事情来实现目标(成功建立一个政策),以及2.你不必放入很多丑陋的检查代码,看看你什么时候到达终点站,因为谁处理它,通过不调用其继任者,将提示完成的项目的返回.