设计模式
本系列文章均是博主原创,意在记录学习上的知识,同时一起分享学习心得。前言
本章介绍状态模式的定义、实现方式和使用场景。
一、定义
有限状态机,英文翻译是Finite State Machine,缩写FSM,简称为状态机。状态机有3个组成部分:状态(State)、事件(Event)、动作(Action)。其中,事件也称为转移条件(Transaction Condition)。事件触发状态的转移及动作的执行。不过,动作不是必须的,也可能只转移状态,不执行任何动作。
二、实现方式
状态机的实现方式:
- 定义一个状态枚举类,确定有多少种状态。
- 定义一个状态类接口,并定义好所有事件方法、获取状态的方法。
- 定义一个状态机类,状态机定义成员状态变量。
- 实现状态类接口。
代码如下(示例):
public enum State {
SMALL(1),
SUPER(2),
FIRE(3),
CAPE(4);
private int value;
State(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
public interface IMario {
State getName();
void obtainMushRoom(MarioStateMachine marioStateMachine);
void obtainCape(MarioStateMachine marioStateMachine);
void obtainFireFlower(MarioStateMachine marioStateMachine);
void meetMonster(MarioStateMachine marioStateMachine);
}
public class MarioStateMachine {
private int score;
private IMario currentState;
@Override
public String toString() {
return "MarioStateMachine{" +
"score=" + score +
", currentState=" + currentState.getName().getValue() +
'}';
}
public MarioStateMachine() {
this.score = 0;
this.currentState = SmallMario.getInstance();
}
public void obtainMushRoom() {
this.currentState.obtainMushRoom(this)