先介绍下状态机,状态机一般由三部分组成:状态(State)、事件(Event)、动作(Action)。其中,事件也称为转移条件(Transition Condition)。事件 触发 状态的转移及动作的执行。不过,动作不是必须的,可能只转移状态,不执行任何动作。
状态模式通过将事件触发的状态转移和动作执行,拆分到不同的状态类中,来避免分支判断逻辑。下面展示“超级马里奥”小游戏的游戏状态之间的状态转换,
public interface IMario {
State getName();
void obtainMushRoom(MarioStateMachine stateMachine);
void obtainCape(MarioStateMachine stateMachine);
void obtainFireFlower(MarioStateMachine stateMachine);
void meetMonster(MarioStateMachine stateMachine);
}
public class SmallMario implements IMario {
private static final SmallMario instance = new SmallMario();
private SmallMario() {}
public static SmallMario getInstance() {
return instance;
}
@Override
public State getName() {
return State.SMALL;
}
@Override
public void obtainMushRoom(MarioStateMachine stateMachine) {
stateMachine.setCurrentSta