成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

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

瀏覽:5日期:2022-08-29 16:38:34

首先在枚舉類中 定義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→ →STEP1STEP1→ →STEP2STEP2→ →STEP3STEP3→ Top9→OFF

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

標(biāo)簽: Java
相關(guān)文章: