设计模式之责任链模式
客户端将消息对象发送给接收者,责任链模式将接收者连成一条链,并在该链上传递该消息对象,直到有对象处理它。通过让更多对象接触到消息请求,避免了发送者和接收者的耦合。
接收者Handler作为一个抽象类,持有自身引用,指向它的后继接收者successor。我们可以通过工厂模式构建这条责任链。
为了更好的满足开闭原则,往往在业务变更的时候只添加类而不修改原码。如果责任链中出现变动,需要修改工厂方法来满足业务需求。
在java ee开发中,过滤器就是一个责任链的经典应用,对用户的请求进行处理。在spring security中通过若干filter类构成了责任链处理http请求,提供认证与授权。
责任链模式可以保证客户端与服务端的松散耦合,但是对链条的遍历过程是消耗时间的,而且在内存中创建了大量接收者对象,仅仅一少部分会使用到。
需要根据实际应用判断是否使用责任链模式,或者使用其他模式替换。