最近看netty 源码时看到有用到责任链模式,所以来学习下。 实现责任链模式代码后,觉得这个模式用的可能少, 但是用起来时基本上可能都是框架范畴的了吧。
责任链模式的实现过程:链条嘛,就是一个传一个,在传的时候有一个人来负责处理客户提过来的请求吧。
理解为:Client 有个 request 然后服务端 有个Handler来处理你的请求,Client 不需要知道你们是怎么处理的,我只要把请求发给你了,你处理好了跟我说就可以了。而对这个请求,服务端的Handler 处理者很多,每个处理者都有不同的范围,你处理不了丢给他吧,然后依次传下去,值到最后一个处理者。
如果用Java 来实现,可定需要设计两个类, Client 类,Handler类并提供 抽象方法暴露给Client 用,Handler 的继承者很实现自己不同权限的处理方法,如何把这个请求传递下去呢?所以Handler类里面有个 protected Handler successor属性 ,把处理不的事丢给successor,并且每个继承者可以设置他的successor是谁,这样责任链就成功实现了。 为了方便,可以用一个工厂方法来实例这些处理者,并设置他的successor是谁。