一.定义
使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。
二.类图
- Handler抽象的处理者。主要职责有三个,一是定义一个请求的处理方法handleMessage,唯一对外开放的方法;二是定义一个链的编排方法setNext,设置下一个处理者;三是定义了请求者必须实现的两个方法:定义自己能够处理的级别和具体的处理任务逻辑。
- ConcreteHandler具体处理结点。
三.优点
能将请求和处理分开。请求者可以不用知道是谁处理的,处理者可以不用知道请求的全貌,两者解耦,提高系统的灵活性。
四.缺点
- 性能问题。每个请求都是从链头遍历到链尾,特别是链比较长的时候,性能是一个比较大的问题。
- 调试不是很方便。
五.注意事项
- 链中结点数量需要控制,避免出现超长链的情况,一般的做法是在Handler中设置一个最大结点数量,在setNext方法中判断是否超过其阈值,超过则不允许该链建立,避免无意识地破坏系统系统。
- 请求者可以不用知道是谁来处理的,这是责任链的核心