如果事情变得更复杂,生成它的代码将非常冗长,但好处是您获得了编译时安全性,线程安全性和高性能。
我目前正在学习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..
}
你可以使用枚举来模拟一个基本的有限状态机:
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);
}
}
您不必自己动手,下面是一个非常简单但功能强大的基于Java8的状态机实现,您可以直接使用:
https://github.com/swiftech/SWState