职责链模式的官方定义:
职责链模式使得多个对象都有机会处理请求,从而降低了请求的发送者和接受者之间的耦合关系。这些对象被连成一条链,并沿着这条链传递发送者的请求,直到有一个对象能处理它为止。
职责链模式的类图:
1.职责链由若干个处理类拼接而成。每个处理类都有两个函数,setNext(Handler)用于设置当前处理类的下一跳地址,handle(request)用于处理请求。
若当前处理类的handle函数无法处理该请求,就将请求传给下一个处理类的handle函数处理。
2.这些处理类写完后交付给客户端。客户端需要创建所有处理类的对象,然后通过每个对象的setNext(Handler)函数设置每个对象的下一跳地址。然后执行某一个处理类对象的handler(request)函数,那么整条链就开始工作了;request会以此传递下去,直到某一个处理类能处理该请求为止。
职责链的好处:
(请求的处理类称为请求的接收者)
请求的发送者和接收者都不知道对方是谁,也就是接收者不知道发送者是谁,发送者不知道接收者是谁;而且链中的所有处理类都不知道链的结构。
职责链简化了对象的相互连接,每个对象仅仅需要维护一个下一跳地址,而不需要保存所有候选接收者的引用,这就大大降低了藕合度。
而且链的结构是由客户端定义的,客户端拿到的一个个处理类就像是一个个元器件,需要我们自己组装,因此这种方式很灵活,但也要避免一条请求走到链的末尾还是没有被处理的情况。