传统的责任链模式的UML图:
从图中可以看出有组合关系,即每个Handler中组合有下一个要执行的Handler,有代码耦合,而且在使用的时候,必须设置好执行链,也就是给每一个Handler设置好后继的Handler。如图:
Client中的代码显示十分冗余重复,所以Spring中对责任链模式进行了优化,把重复冗余的部分封装起来,封装成一个执行链,避免了要写大量代码来手动设置链。
Chain:
List中储存的是所有要执行的Handler,它们在List中的顺序就是在责任链中的执行顺序,index是用来索引当前要执行的Handler的。然后执行ChainHandler的execute方法,并且把自己作为参数传递过去,在execute方法中的业务逻辑执行完后,通过传过去的Chain对象再次调用proceed方法回来,继续到下一个所要执行的Handler。
Client代码: