Java如何通過枚舉實現(xiàn)有限狀態(tài)機
首先在枚舉類中 定義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)用對應state的相應的方法。
public class ContextData {
private Boolean isValid_;//廣告位是否有效
private Boolean isFirst_;//是否第一次請求
private Boolean isBusinessLine_;//是否屬于業(yè)務線廣告位
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ù),按次序調(diào)用對應的Action
JavaPlatformMachine pm = new JavaPlatformMachine(); pm.data.setValid_(true);// 廣告位是否有效 pm.data.setFirst_(false);// 是否第一次請求 pm.data.setBusinessLine_(true);//是否屬于業(yè)務線廣告位 pm.data.setDistrict_(true);//是否有地域 pm.valid(); pm.first(); pm.businessLine(); pm.district();
輸出結(jié)果:
OPEN→ →STEP1 STEP1→ →STEP2 STEP2→ →STEP3 STEP3→ Top9 →OFF
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
解決工具接口調(diào)用報錯:error:Unsupported Media Type問題
當遇到"UnsupportedMediaType"錯誤時,意味著HTTP請求的Content-Type與服務器期望的不匹配,比如服務器期待接收JSON格式數(shù)據(jù),而發(fā)送了純文本格式,常見的Content-Type類型包括text/html、application/json、multipart/form-data等2024-10-10
Java Elastic Job動態(tài)添加任務實現(xiàn)過程解析
這篇文章主要介紹了Java Elastic Job動態(tài)添加任務實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08
java調(diào)用chatgpt接口來實現(xiàn)專屬于自己的人工智能助手
這篇文章主要介紹了用java來調(diào)用chatget的接口,實現(xiàn)自己的聊天機器人,對人工智能感興趣的小伙伴可以參考閱讀2023-03-03

