职责模式
什么是责任模式
为避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求。将这些接收对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止
职责模式也成为责任链模式,他将请求的发送者和接收者解耦了。客户端不需要知道请求处理者的明确信息和处理的具体逻辑,甚至不需要知道链的结构,它只需要将请求进行发送即可
设计思想
在责任模式中我们可以随时随地增加或者更改责任人,甚至可以更改责任人的顺序,增加了系统的灵活性。但有时候可能会导致一个请求无论如何也得不到处理,他会被放置在链条末端
设计要点
- 请求者与请求内容:确认谁要发送请求,发送请求的对象成为请求者。请求的内容通过发送请求时的参数进行传递
- 有哪些责任人:责任人是构成责任链的关键要素。请求的流动方向是链条中的线,而责任人则是链条上的节点,线和节点共同构成了一条链条
- 对责任人进行抽象:真实世界中的责任人多种多样,纷繁复杂,有不同的职责和功能;但他们也有一个共同的特征——都可以处理请求。所以需要对责任人进行抽象,使他们具有责任的可传递行
- 责任人可自由组合:责任链上的责任人可以根据业务的具体逻辑进行自由的组合和排序
优缺点
优点:
- 降低耦合度。将请求的发送者和接收者解耦
- 简化了对象。使得对象不需要知道链的结构
- 增强给对象指派职责的灵活性。可改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任人
- 增加新的处理类很方便
缺点:
- 不能保证请求一定被接收
- 系统性能将受到一定地影响,而且在进行代码调试时不太方便,可能会造成循环调用
应用场景
- 有多个对象可以处理同一个请求,具体那个对象处理该请求在运行时刻自动确定
- 请求地处理具有明显地一层层传递关系
- 请求地处理流程和顺序需要程序运行时动态确定。
- 常见地审批流程