如何在Java中创建简单的状态机

发布于 2021-01-29 19:44:02

我目前正在学习Java,并且想知道如何以OO方式控制状态。我实现了一个Pong应用程序。如果我想要多个状态,例如游戏性和菜单状态,并且这些状态中的每个状态都必须执行启动,停止和运行,我将如何实现此目标以及如何在这些状态之间进行切换。

我知道我可以简单地添加一个大的switch语句,但是实现这一点的最佳方法是什么?

我希望能够在游戏状态下切换到菜单状态,反之亦然。

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..
}
关注者
0
被浏览
155
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可以使用枚举来模拟基本的FSM(有限状态机):

    public enum State {
    
        ONE {
            @Override
            public Set<State> possibleFollowUps() {
                return EnumSet.of(TWO, THREE);
            }
        },
    
        TWO {
            @Override
            public Set<State> possibleFollowUps() {
                return EnumSet.of(THREE);
            }
        },
    
        THREE // final state
    
        ;
        public Set<State> possibleFollowUps() {
            return EnumSet.noneOf(State.class);
        }
    
    }
    

    如果事情变得更复杂,则生成该代码的代码将非常冗长,但令人高兴的是,您可以获得编译时安全性,线程安全性和高性能。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看