EventBus 实现java状态机实例
发布时间:2023-02-20 11:04:21 所属栏目:Java 来源:互联网
导读:首先,了解状态机是什么,我们为什么需要状态机! 举个最简单例子,请假,作为一个最底层程序员,每次请假都要领导层层审批,而假有分为很多种,事假,病假,婚假,年休假等等,当然选择请的假不同,审批标准也不同,不同的假单需要走的审批链也不一样,比如
switch (status){ case PERMIT_SUBMIT: //提交假单状态直接跳转领导审批中状态 return Status.leader_PERMITING; case leader_PERMITING: //领导审批中状态需要审批意见再获取下一个状态 return getleaderPermitStatus(event); case leader_PERMIT_AGREE: //领导同意审批该假单 跳转hr审批中状态 return Status.HR_PERMITING; case leader_PERMIT_disAGREE: //领导不同意则返回请假失败 return Status.PERMIT_FAIL; case leader_PERMIT_MODIFY: return getleaderPermitStatus(event); case HR_PERMITING: //hr审批根据审批意见跳转下一个状态 return getHrPermitStatus(event); case HR_PERMIT_AGREE: //hr审批通过跳转审批完成状态 return Status.PERMIT_SUCCESS; case HR_PERMIT_disAGREE: // hr审批不同意 返回请假失败 return Status.PERMIT_FAIL; case HR_PERMIT_MODIFY: return getHrPermitStatus(event); default: throw new RuntimeException("没有该流程"); } } private Status getleaderPermitStatus(Event event){ switch (event){ case AGREE: //领导同意该假单,则返回领导审批通过 return Status.leader_PERMIT_AGREE; case disSAGREE: //领导不同意该假单 则返回领导审批不通过 return Status.leader_PERMIT_disAGREE; case MODIFY: return Status.leader_PERMIT_MODIFY; default: throw new RuntimeException("不支持该Event审批意见"); } } private Status getHrPermitStatus(Event event){ switch (event){ case AGREE: //hr审批同意该假单,则返回hr同意状态 return Status.HR_PERMIT_AGREE; case disSAGREE: //hr审批不同意该假单,则返回hr不同意状态 return Status.HR_PERMIT_disAGREE; case MODIFY: return Status.HR_PERMIT_MODIFY; default: throw new RuntimeException("不支持该Event审批意见"); } } } 对于请假的员工来讲,只知道提交了一个假单,并不会关心到底该流程怎么走,所以在设计的时候,需要根据请假类型能够自动匹配状态机,这里可以用静态工厂去实现。 public class StatusMachineFactory { private StatusMachineFactory(){ } /** * 根据状态获取状态机 * @param leavePermitType * @return 对应请假类型的状态机 */ public static StatusMachine getStatusMachine(LeavePermitType leavePermitType){ switch (leavePermitType){ case MEDICAL_LEAVE: return new MedicalLeaveStatusMachine(); case ANNUAL_LEAVE: return new AnnualLeaveStatusMachine(); (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |