责任链模式是将链中的每一个节点看做是一个对象,每个节点处理的请求均不相同,且内部自动维护下一个节点对象,当一个请求从链式的首段发出时,会沿着链的路径依次传递给每一个节点对象,直至有对象处理这个请求位置,属于行为模式。
这里需要注意的是每个节点都能对对象进行一定的处理(也可以不处理),处理完成之后节点再进行判断还要进行后续处理还是说传递给下一个节点。
应用场景
首先举一个日常的例子,比如我们申请开发票,首先我们要写好报销单,首先要你的部门领导审批,部门领导审批不通过直接打回,审批通过再由公司的总经理审批这里审批通过才算成审批完成。这种情况就很适合使用责任链模式。
总结一下责任链主要适用一下几种情况:
- 多个对象可以处理同一个请求,但是具体由那个对象处理完成则在运行时决定。
- 不明确指定接收者的情况下,向多个对象中的一个提交一个请求
可以看一下责任链模式的通用UML类图:
通过类图可以看到总共包含以下角色:
- 抽象处理者:主要是定义处理请求的方法以及维护下一个处理结点的对象的引用
- 具体处理者:处理的具体实现
责任链的精髓在于将很多处理节点行成个链式结构,并允许结点自身决定是否进行处理或者转发。
实际代码案例
下面举一个我们在开发时经常会遇到的一种情况:登录 比如我们开发一个管理系统在登录的时候往往我们会先判断客户端传递的账号及密码是否为空但凡有一个是空肯定是不能继续往下走的,