Java中如何利用枚举构建一个有限状态机实例?

2026-05-24 09:111阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计611个文字,预计阅读时间需要3分钟。

Java中如何利用枚举构建一个有限状态机实例?

首先在枚举类中定义`state`和对应的抽象方法。接着定义`JavaPlatformState`枚举,并实现`OPEN`状态下的`exit`和`valid`方法。

javapublic enum JavaPlatformState { OPEN { @Override void exit(JavaPlatformMachine pm) { super.exit(pm); }

Java中如何利用枚举构建一个有限状态机实例?

@Override void valid(JavaPlatformMachine pm) { this.exit(pm); if (条件.equals(pm.getCondition())) { // 执行一些操作 } } };

// 抽象方法 abstract void exit(JavaPlatformMachine pm); abstract void valid(JavaPlatformMachine pm);}

首先在枚举类中 定义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) {} }, ... //状态模式 提取的接口 在常量实体类中实现抽象方法 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 ContextData { 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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。

本文共计611个文字,预计阅读时间需要3分钟。

Java中如何利用枚举构建一个有限状态机实例?

首先在枚举类中定义`state`和对应的抽象方法。接着定义`JavaPlatformState`枚举,并实现`OPEN`状态下的`exit`和`valid`方法。

javapublic enum JavaPlatformState { OPEN { @Override void exit(JavaPlatformMachine pm) { super.exit(pm); }

Java中如何利用枚举构建一个有限状态机实例?

@Override void valid(JavaPlatformMachine pm) { this.exit(pm); if (条件.equals(pm.getCondition())) { // 执行一些操作 } } };

// 抽象方法 abstract void exit(JavaPlatformMachine pm); abstract void valid(JavaPlatformMachine pm);}

首先在枚举类中 定义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) {} }, ... //状态模式 提取的接口 在常量实体类中实现抽象方法 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 ContextData { 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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。