学习路径: https://coding.imooc.com/class/270.html
- 应用场景
流程的审批
public static void main(String[] args) {
SuperiorHandler superiorHandler = new SuperiorHandler();
DepartmentHandler departmentHandler = new DepartmentHandler();
// 确定默审批流程: 直接上级审批 -> 部门经理审批
superiorHandler.setNextHandler(departmentHandler);
// 新的请假申请
Application application = new Application("2019年6月8日20:11:54","病假");
// 直接上级开始审批请假申请, 执行到这后下一步会把表单传递给部门经理审批,是一种隐式调用
superiorHandler.deploy(application);
}
- 实现
**
* 抽象处理者
*/
public abstract class Handler {
// 子类默认持有下一跳的变量,下一跳同样为Handler类型
protected Handler nextHandler;
/**
* 设置下一跳
* @param handler
*/
public void setNextHandler(Handler handler) {
this.nextHandler = handler;
}
/**
* 每一跳的业务逻辑
* @param application
*/
public abstract void deploy(Application application);
}
/**
* 直接上级
*/
public class SuperiorHandler extends Handler{
@Override
public void deploy(Application application) {
application.getReason();
application.getTime();
// 直接上级看到消息...省略审批逻辑
System.out.println("直接上级已审批");
// 下一跳由应用层指定,若无指定,则流程结束
if(nextHandler != null) {
nextHandler.deploy(application);
}
}
}
- 总结
责任链设计模式有点像单向链表的实现。责任链中的Handler可以增加下一跳的Handler, 任意Handler进行流程扭转的时候,自动携带所有下一跳Handler。一个流程上的Handler增删改方便。