实现后继者链
① 定义新的链接;② 使用已有的链接
当已有的链接能够支持你所需的链时,完全可以使用它们。这样你不需要明确定义链接,而且可以节省空间。但如果该结构不能反映应用所需的职责链,那么你必须定义额外的链接。
比如,当前职责处理对象引用了一个"职责链_One”作为它的后继者链,而这个"职责链_One”中已经存在了它自己的后继者链,假设这个"职责链_One”完整的链为“A ——> B ——> C”。这样当前的职责处理对象其实并没有明确的指定“A ——> B ——> C”这个链,而是通过组合的模式复用了该链。
一个职责链处理多种请求
① 在Handler中定义不同的方法表示不同的请求。这种形式方便而且安全,但你只能转发Handler类定义的固定的一组请求。
② 定义一个请求对象类(Request)来封装请求的类型和参数。Handler中依旧指定义一个通用的请求方法,该方法不区分请求的类型,所以的请求都是调用该方法,具体的请求类型通过请求对象(Request)中的请求类型属性来标识。那么在具体的接收者中就可以通过Request中标识的不同请求类型进行不同的逻辑处理,处理逻辑依旧是要么处理该请求,要么将该Request对象传递给下一个接收者。
优点:
① 降低耦合度
在职责链模式里面,请求者并不知道接收者是谁,也不知道具体如何处理,请求者只是负责向职责链发出请求就可以了。接收者和请求者都没有对象的明确的信息,且链中的对象不需要知道链的结构。
结果是,职责链可简化接收者对象的相互连接。它们仅需保持一个指向其后续者的引用,而不需要保持它所有的候选接收者的引用。
② 增强了给对象指派职责的灵活性
当在接收者中分派职责时,职责链给你更多的灵活性。你可以通过在运行时刻对该链进行动态的增加或修改来增加或改变处理一个请求的那些职责。
缺点:
① 不保证被接受
既然一个请求没有明确的接收者,那么就不能保证它一定会被处理 ———— 该请求可能一直到链的末端都得不到处理。一个请求也可能因该链没有正确配置而得不到处理。