加入收藏 | 设为首页 | 会员中心 | 我要投稿 莱芜站长网 (https://www.0634zz.com/)- 云连接、建站、智能边缘云、设备管理、大数据!
当前位置: 首页 > 编程开发 > Java > 正文

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();

(编辑:莱芜站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读