概述:申请和审批业务为例
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); } }