公司发生的各种各样的事情,都需要有人来处理。比如,一个底层员工接到了一个新业务。首先他会判断这个业务的重要性和自己的职责,看看自己处理就好,还是该上报给自己的领导--部门经理。部门经理如果接到了这个消息,他也会做同样的事情,一直到公司的最高决策者都在这个链条中。
责任链模式就是处理这类事物模型的设计模式,通过把可能需要参与到处理中的对象,加入到这个链条中,交付任务的人不需要关心这个任务在何时何地由谁来处理,他只需要交付出去就可以了。
职责链模式:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。职责链模式是一种对象行为型模式。
简单的责任链模式的结构如下:
Handler为抽象的处理者,它定义了处理方法,由不同的具体实现者去实现。同时,它还包含了一个对类型为Handler本身的引用。这个引用指向的是当前处理者在责任链中的下一个处理者。通过这种方式,可以灵活的组成直线型的链条或环形链条。如果对Handler稍作改动还可以组成树形甚至更复杂的责任链。
根据责任链中每个节点的职责模型不同,责任链可以分为单纯职责链和不纯职责链。
单纯职责链指的是每个节点要么把任务交给下一个节点,要么自己全部处理完成。
不纯职责链指的是,一个节点对当前任务可能只处理自己职责内的一部分工作,然后将任务继续向下推。即一个任务可能由多个节点共同完成。
总结:
优点:
- 任务交付者无需关心任务最终怎样被处理,将客户端和处理逻辑解耦
- 职责链具有很大的灵活性,可以组建很复杂的模型,而且可以方便的动态修改
- 模型修改时,只需改变节点相互间的引用,不比修改节点代码,复合开闭原则
- 任务可能没有合适处理节点,导致不被处理
- 如果职责链较长,不便于调试
- 可能造成死循环
- 一个任务有多个处理者,而不像交付者去关心具体由谁来处理
- 动态的改变一些处理者的次数或结构