最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java如何通過枚舉實(shí)現(xiàn)有限狀態(tài)機(jī)

 更新時(shí)間:2020年07月06日 09:54:59   作者:BarryW  
這篇文章主要介紹了Java如何通過枚舉實(shí)現(xiàn)有限狀態(tài)機(jī),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

首先在枚舉類中 定義state 和定義的抽象方法。

public enum JavaPlatformState {
  // 定義state
  OPEN{
    @Override void exit(JavaPlatformMachine pm){super.exit(pm);}
    
    @Override void valid(JavaPlatformMachine pm){
      this.exit(pm);
      if(pm.data.getValid_()){
        pm.state =STEP1;
      }else{
        NotFound();
        pm.state =OFF;
      }
      pm.state.entry(pm);
    }

    @Override
    void first(JavaPlatformMachine pm) {}

    @Override
    void businessLine(JavaPlatformMachine pm) {}

    @Override
    void district(JavaPlatformMachine pm) {}
  },
  STEP1{
    @Override void exit(JavaPlatformMachine pm){super.exit(pm);}

    @Override
    void valid(JavaPlatformMachine pm) {}

    @Override void first(JavaPlatformMachine pm){
      this.exit(pm);
      if(!pm.data.getFirst_()){
        pm.state =STEP2;
      }else{
        ReturnDimension();
        pm.state =OFF;
      }
      pm.state.entry(pm);
    }

    @Override
    void businessLine(JavaPlatformMachine pm) {}

    @Override
    void district(JavaPlatformMachine pm) {}
  },
  ...
  
  //狀態(tài)模式 提取的接口 在常量實(shí)體類中實(shí)現(xiàn)抽象方法
  abstract void valid(JavaPlatformMachine pm);
  abstract void first(JavaPlatformMachine pm);
  abstract void businessLine(JavaPlatformMachine pm);
  abstract void district(JavaPlatformMachine pm); 
}

在enum JavaPlatformState 中,除了狀態(tài)模式 提取的接口外,添加了狀態(tài)機(jī)的各種動(dòng)作action實(shí)現(xiàn)

//狀態(tài)機(jī)的各種動(dòng)作action methode
  void entry(JavaPlatformMachine pm){System.out.println("→"+pm.state.name());}
  void exit(JavaPlatformMachine pm){System.out.println(pm.state.name()+"→ ");}
  
  void NotFound(){System.out.println("NotFound");}
  void ReturnDimension(){System.out.println("ReturnDimension");}
  void PreciseAdvertising(){System.out.println("PreciseAdvertising");}
  void Top9(){System.out.println("Top9");}

建立狀態(tài)機(jī)實(shí)體,ContextData是封裝條件的bean類,初始化狀態(tài)OPEN,在狀態(tài)機(jī)里定義action,調(diào)用對(duì)應(yīng)state的相應(yīng)的方法。

public class ContextData {
  private Boolean isValid_;//廣告位是否有效
  private Boolean isFirst_;//是否第一次請(qǐng)求
  private Boolean isBusinessLine_;//是否屬于業(yè)務(wù)線廣告位
  private Boolean district_;//是否有地域
  ...
}

public class JavaPlatformMachine {
  ContextData data = new ContextData();
  JavaPlatformState state = JavaPlatformState.OPEN;
  //Action
  public void valid(){state.valid(this);}
  public void first(){state.first(this);}
  public void businessLine(){state.businessLine(this);}
  public void district(){state.district(this);}
}

測(cè)試方法,初始化狀態(tài)機(jī),設(shè)置參數(shù),按次序調(diào)用對(duì)應(yīng)的Action

JavaPlatformMachine pm = new JavaPlatformMachine();
  pm.data.setValid_(true);// 廣告位是否有效
  pm.data.setFirst_(false);// 是否第一次請(qǐng)求
  pm.data.setBusinessLine_(true);//是否屬于業(yè)務(wù)線廣告位
  pm.data.setDistrict_(true);//是否有地域
  pm.valid();
  pm.first();
  pm.businessLine();
  pm.district();

輸出結(jié)果:

OPEN→ 
→STEP1
STEP1→ 
→STEP2
STEP2→ 
→STEP3
STEP3→ 
Top9
→OFF

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解決工具接口調(diào)用報(bào)錯(cuò):error:Unsupported Media Type問題

    解決工具接口調(diào)用報(bào)錯(cuò):error:Unsupported Media Type問題

    當(dāng)遇到"UnsupportedMediaType"錯(cuò)誤時(shí),意味著HTTP請(qǐng)求的Content-Type與服務(wù)器期望的不匹配,比如服務(wù)器期待接收J(rèn)SON格式數(shù)據(jù),而發(fā)送了純文本格式,常見的Content-Type類型包括text/html、application/json、multipart/form-data等
    2024-10-10
  • Java Elastic Job動(dòng)態(tài)添加任務(wù)實(shí)現(xiàn)過程解析

    Java Elastic Job動(dòng)態(tài)添加任務(wù)實(shí)現(xiàn)過程解析

    這篇文章主要介紹了Java Elastic Job動(dòng)態(tài)添加任務(wù)實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Spring Mvc中攔截器Interceptor用法解讀

    Spring Mvc中攔截器Interceptor用法解讀

    這篇文章主要介紹了Spring Mvc中攔截器Interceptor用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • java調(diào)用chatgpt接口來實(shí)現(xiàn)專屬于自己的人工智能助手

    java調(diào)用chatgpt接口來實(shí)現(xiàn)專屬于自己的人工智能助手

    這篇文章主要介紹了用java來調(diào)用chatget的接口,實(shí)現(xiàn)自己的聊天機(jī)器人,對(duì)人工智能感興趣的小伙伴可以參考閱讀
    2023-03-03
  • Java語言描述MD5加密工具類實(shí)例代碼

    Java語言描述MD5加密工具類實(shí)例代碼

    這篇文章主要介紹了Java語言描述MD5加密工具類實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Spring 中優(yōu)雅的獲取泛型信息的方法

    Spring 中優(yōu)雅的獲取泛型信息的方法

    這篇文章主要介紹了Spring 中優(yōu)雅的獲取泛型信息的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • SpringBoot如何訪問jsp頁面

    SpringBoot如何訪問jsp頁面

    本文介紹了如何在Spring Boot項(xiàng)目中進(jìn)行Web開發(fā),包括創(chuàng)建項(xiàng)目、配置文件、添加依賴、控制層修改、測(cè)試效果以及在IDEA中進(jìn)行配置的詳細(xì)步驟
    2025-01-01
  • Java基礎(chǔ)之內(nèi)部類與代理知識(shí)總結(jié)

    Java基礎(chǔ)之內(nèi)部類與代理知識(shí)總結(jié)

    今天帶大家復(fù)習(xí)Java的基礎(chǔ)知識(shí),文中有非常詳細(xì)的介紹及圖文示例,對(duì)正在學(xué)習(xí)Java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • Java自然排序Comparable使用方法解析

    Java自然排序Comparable使用方法解析

    這篇文章主要介紹了Java自然排序Comparable使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Maven 主模塊和子模塊pom.xml依賴聲明

    Maven 主模塊和子模塊pom.xml依賴聲明

    這篇文章主要介紹了Maven 主模塊和子模塊pom.xml依賴聲明,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10

最新評(píng)論

怀柔区| 扎鲁特旗| 建瓯市| 德庆县| 新巴尔虎左旗| 潞城市| 盘锦市| 金山区| 句容市| 惠安县| 长岛县| 盘山县| 旬邑县| 于田县| 锦屏县| 中方县| 青州市| 彩票| 彭山县| 南华县| 睢宁县| 深泽县| 广州市| 巴林右旗| 香港| 卓尼县| 滨海县| 呈贡县| 肇州县| 惠来县| 贡山| 安阳县| 靖远县| 福鼎市| 揭东县| 雅安市| 红安县| 苍梧县| 娱乐| 手机| 探索|