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

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

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

首先在枚舉類中 定義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)模式 提取的接口 在常量實體類中實現(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)機的各種動作action實現(xiàn)

//狀態(tài)機的各種動作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)機實體,ContextData是封裝條件的bean類,初始化狀態(tài)OPEN,在狀態(tài)機里定義action,調(diào)用對應(yīng)state的相應(yīng)的方法。

public class ContextData {
  private Boolean isValid_;//廣告位是否有效
  private Boolean isFirst_;//是否第一次請求
  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);}
}

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

JavaPlatformMachine pm = new JavaPlatformMachine();
  pm.data.setValid_(true);// 廣告位是否有效
  pm.data.setFirst_(false);// 是否第一次請求
  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

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

相關(guān)文章

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

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

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

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

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

    Spring Mvc中攔截器Interceptor用法解讀

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

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

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

    Java語言描述MD5加密工具類實例代碼

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

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

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

    SpringBoot如何訪問jsp頁面

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

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

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

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

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

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

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

最新評論

临汾市| 大新县| 晴隆县| 安达市| 桃江县| 沽源县| 尚义县| 永济市| 抚顺县| 林甸县| 册亨县| 冷水江市| 福清市| 仙桃市| 丰台区| 香港| 新巴尔虎左旗| 定西市| 烟台市| 五台县| 弥勒县| 湖口县| 托里县| 焦作市| 宜阳县| 会宁县| 永登县| 青川县| 汽车| 赞皇县| 航空| 丹东市| 乳山市| 鸡泽县| 同江市| 明光市| 九江市| 洛隆县| 永福县| 页游| 天水市|