如何在java中创建一个简单的状态机
我目前正在学习java,并想知道如何以OO方式控制状态。 我实现了一个Pong应用程序。 如果我想要游戏和菜单等多个状态,并且这些状态中的每一个都必须执行start,stop和run我将如何实现这一点以及如何在这些状态之间切换。
我知道我可以简单地提出一个重要的转换声明但是实现这个的最佳方法是什么?
我希望能够在游戏状态下切换到菜单状态,反之亦然。
import java.applet.*; import java.awt.*; import java.awt.event.*; public class Pong extends Applet implements Runnable, KeyListener{ public void start () { setSize(screen); setFocusable(true); Thread th = new Thread (this); th.start (); } public void stop() { } //Etc.. }
您可以使用枚举模拟基本FSM(有限状态机):
public enum State { ONE { @Override public Set possibleFollowUps() { return EnumSet.of(TWO, THREE); } }, TWO { @Override public Set possibleFollowUps() { return EnumSet.of(THREE); } }, THREE // final state ; public Set possibleFollowUps() { return EnumSet.noneOf(State.class); } }
虽然如果事情变得更复杂,生成它的代码将非常冗长,但好的部分是您获得编译时安全性,线程安全性和高性能。
- 在帧上绘制自己的缓冲图像
- Spring Boot CommandLineRunner:filter选项参数
- 如何将Java中的二维矩阵映射到Hibernate / JPA?
- 从Eclipse运行Tomcat时避免Permgen Space错误
- Java证书客户端SSL:无法找到所请求目标的有效证书路径
- 使用@WebMvcTest获取“必须至少存在一个JPA元模型”
- 在Java中使用带有String和Object的equals()方法
- 在运行时释放OS的java内存。
- RestEasy:org.codehaus.jackson.map.JsonMappingException:无法从START_OBJECT标记(..)中反序列化java.util.ArrayList的实例