责任链模式简介
- 责任链模式(chain responsibility)是为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者,通过前一对象记住其下一个对象的引用,而连成一条链,当有请求发生时候,可将请求沿着这一条链传递,直到有对象处理它为止。
结构
- 1.抽象处理者角色(Abstract Handler):定义一个处理请求的接口,包含抽象处理方法和一个后续链接。
- 2.具体处理者角色(concrete Handler):实现抽象处理者角色的处理方法,判断能否处理本次请求,如果可以处理请求则处理,不能就转给它的后续者。
- 3.客户类角色(Client):创建处理类,并向链头的具体处理者对象提交请求,它不关心处理细节和请求的传递过程。
UML图
具体实现
例子:员工请假,1-3天小组长有权限批准,3-7天部门经理有权限审批,7天以上需要总经理审批,用责任链模式实现此场景功能。
UML图
代码实现
- 抽象处理角色
package com.xxliao.pattern.behavioral.chain_responsibility.demo;
/**
* @author xxliao
* @description: 抽象处理类
* @date 2024/5/27 17:28
*/
public abstract class Handler {
protected final static int NUM_ONE = 1;
protected final static int NUM_THREE = 3;
protected final static int NUM_SEVEN = 7;
// 该处理者可以处理的取件
private int startNum;
private int endNum;
// 上级领导
private Handler nextHandler;
// 设置请假天数
public Handler(int startNum) {
this.startNum = startNum;
}
// 设置请假天数范围
public Handler(int startNum, int endNum) {
this.startNum = startNum;
this.endNum = endNum;
}
// 设置上级领导
public void setNextHandler(Handler nextHandler) {
this.nextHandler = nextHandler;
}
/**
* @description 提交请假条
* @author xxliao
* @date 2024/5/27 17:32
*/
public final void submit