设计模式之责任链模式实例

tech2025-09-27  21

概述:申请和审批业务为例

1、抽象申请人

public abstract class AbstractApplier { int money; /** * 申请费用 * * @param money 费用 单位:分 */ abstract void apply(int money); }

2、职员

public class Staff extends AbstractApplier { @Override public void apply(int money) { super.money = money; } }

3、抽象审批人

public abstract class AbstractApprover { protected static final Logger LOGGER = LoggerFactory.getLogger(AbstractApprover.class); AbstractApprover superApprover; int controlMoney; abstract void dealApply(AbstractApplier applier); public void handerRequest(AbstractApplier applier){ // 条件 if(controlMoney > 0 && applier.money > controlMoney) { superApprover.handerRequest(applier); return; } dealApply(applier); } public void setSuperApprover(AbstractApprover approver){ this.superApprover = approver; } }

4、主管审批

public class ChargeApprover extends AbstractApprover { @Resource private DepartmentManagerApprover departmentManagerApprover; @PostConstruct public void init(){ super.controlMoney = controlFee(); super.setSuperApprover(departmentManagerApprover); } @Override void dealApply(AbstractApplier applier) { LOGGER.info("ChargeApprover handerRequest money {}", applier.money); } private int controlFee() { return 500; } }

5、部门经理审批

public class DepartmentManagerApprover extends AbstractApprover{ @Resource private ManagerApprover managerApprover; @PostConstruct public void init(){ super.controlMoney = controlFee(); super.setSuperApprover(managerApprover); } @Override void dealApply(AbstractApplier applier) { LOGGER.info("DepartmentManagerApprover handerRequest money {}", applier.money); } private int controlFee() { return 1000; } }

6、总经理审批

public class ManagerApprover extends AbstractApprover { @PostConstruct public void init() { super.setSuperApprover(this); } @Override void dealApply(AbstractApplier applier) { LOGGER.info("ManagerApprover handerRequest money {}", applier.money); } }
最新回复(0)