EventBus 实现java状态机实例
发布时间:2023-02-20 11:04:21 所属栏目:Java 来源:互联网
导读:首先,了解状态机是什么,我们为什么需要状态机! 举个最简单例子,请假,作为一个最底层程序员,每次请假都要领导层层审批,而假有分为很多种,事假,病假,婚假,年休假等等,当然选择请的假不同,审批标准也不同,不同的假单需要走的审批链也不一样,比如
} } public interface StatusMachine { /** *@params status 当前状态 *@params event 审批意见 *@return 下一个状态 **/ public Status getNextStatus(Status status,Event event); } public class AnnualLeaveStatusMachine implements StatusMachine{ public Status getNextStatus(Status status,Event event){ switch (status){ case PERMIT_SUBMIT: //提交假单状态无需审批跳转领导审批中状态 return Status.leader_PERMITING; case leader_PERMITING: //领导审批需要审批意见 审批意见不用返回不同的状态 return getleaderPermitStatus(event); case leader_PERMIT_AGREE: //领导同意请假,则跳转ceo审批 return Status.CEO_PERMITING; case leader_PERMIT_disAGREE: //领导不同意该假单,则请假失败 return Status.PERMIT_FAIL; case leader_PERMIT_MODIFY: return getleaderPermitStatus(event); case CEO_PERMITING: //ceo审批需要审批意见 return getCEOPermitStatus(event); case CEO_PERMIT_AGREE: // ceo审批同意 跳转审批通过 请假完成 return Status.PERMIT_SUCCESS; case CEO_PERMIT_disAGREE: //ceo不同意审批 则跳转审批失败 return Status.PERMIT_FAIL; case CEO_PERMIT_MODIFY: return getCEOPermitStatus(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 getCEOPermitStatus(Event event){ switch (event){ case AGREE: //ceo审批通过 则返回ceo同意该假单 return Status.CEO_PERMIT_AGREE; case disSAGREE: // ceo审批不通过 则返回ceo不同意该假单状态 return Status.CEO_PERMIT_disAGREE; case MODIFY: return Status.CEO_PERMIT_MODIFY; default: throw new RuntimeException("不支持该Event审批意见"); } } } 病假的审批流程: 提交假单 PERMIT_SUBMIT 领导审批 leader_PERMITING 等待领导审批 领导审批通过/不通过/拒绝 领导审批通过 leader_PERMIT_AGREE HR审批 HR_PERMITING 等待HR审批意见 HR审批通过/不通过/拒绝 HR审批通过 CEO_PERMIT_AGREE 请假完成 PERMIT_SUCCESS 根据该流程不难设计出该状态机 public class MedicalLeaveStatusMachine implements StatusMachine{ public Status getNextStatus(Status status,Event event){ (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |