如何在java中创建一个简单的状态机

时间:2011-04-26 12:28:18

标签: java state-machine

我目前正在学习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..
}

1 个答案:

答案 0 :(得分:31)

您可以使用枚举模拟基本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);
    }

}

虽然如果事情变得更复杂,生成它的代码将非常冗长,但好的部分是你获得编译时的安全性,线程安全性和高性能。