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