多平台统一管理软件接口,如何实现多平台统一管理软件接口
388
2022-12-02
Java如何通过枚举实现有限状态机
首先在枚举类中 定义state 和定义的抽象方法。
public enum javaPlatformState {
// 定义state
OPEN{
@Override void exit(JavaPlatformMachine pm){super.exit(pm);}
@Override void valid(JavaPlatformMachine pm){
this.exit(pNZvcrpyXim);
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) {}
},
...
//状态模式 提取的接口 在常量实体类中实现抽象方法
abstract void valid(JavaPlatformMachine pm);
abstract void first(JavaPlatformMachine pm);
abstract void businessLine(JavaPlatformMachine pm);
abstract void district(JavaPlatformMachine pm);
}
在enum JavaPlatformState 中,除了状态模式 提取的接口外,添加了状态机的各种动作action实现
//状态机的各种动作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");}
建立状态机实体,ContextData是封装条件的bean类,初始化状态OPEN,在状态机里定义action,调用对应state的相应的方法。
public class Contexhttp://tData {
private Boolean isValid_;//广告位是否有效
private Boolean isFirst_;//是否第一次请求
private Boolean isBusinessLine_;//是否属于业务线广告位
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);}
}
测试方法,初始化状态机,设置参数,按次序调用对应的Action
JavaPlatformMachine pm = new JavaPlatformMachine();
pm.data.setValid_(true);// 广告位是否有效
pm.data.setFirst_(false);// 是否第一次请求
pm.data.setBusinessLine_(true);//是否属于业务线广告位
pm.data.setDistrict_(true);//是否有地域
pm.valid();
pm.first();
pm.businessLine();
pm.district();
输出结果:
OPEN→
→STEP1
STEP1→
→STEP2
STEP2→
→STEP3
STEP3→
Top9
→OFF
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~