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

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){

(编辑:莱芜站长网)

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

推荐文章
    热点阅读