java状态机设计模式
时间: 2023-10-11 22:13:33 浏览: 51
Java状态机是一种设计模式,它可以将复杂的状态转换逻辑封装起来,使得代码更加清晰、简洁。状态机由状态、事件和动作组成,状态表示对象当前的状态,事件表示状态转换的触发条件,动作表示状态转换时要执行的操作。
在Java中,状态机可以通过接口和枚举类实现。其中,接口定义了状态机的行为,枚举类则定义了状态和事件。具体实现过程如下:
1. 定义状态机接口
```java
public interface StateMachine {
void setState(State state);
State getState();
void handleEvent(Event event);
}
```
2. 定义状态和事件的枚举类
```java
public enum State {
START,
RUNNING,
STOPPED
}
public enum Event {
START,
STOP,
PAUSE
}
```
3. 实现状态机接口
```java
public class StateMachineImpl implements StateMachine {
private State state;
public StateMachineImpl() {
this.state = State.START;
}
@Override
public void setState(State state) {
this.state = state;
}
@Override
public State getState() {
return state;
}
@Override
public void handleEvent(Event event) {
switch (state) {
case START:
if (event == Event.START) {
setState(State.RUNNING);
System.out.println("Started");
}
break;
case RUNNING:
if (event == Event.STOP) {
setState(State.STOPPED);
System.out.println("Stopped");
} else if (event == Event.PAUSE) {
setState(State.START);
System.out.println("Paused");
}
break;
case STOPPED:
if (event == Event.START) {
setState(State.RUNNING);
System.out.println("Restarted");
}
break;
}
}
}
```
4. 测试状态机
```java
public class StateMachineTest {
public static void main(String[] args) {
StateMachine stateMachine = new StateMachineImpl();
stateMachine.handleEvent(Event.START);
stateMachine.handleEvent(Event.PAUSE);
stateMachine.handleEvent(Event.STOP);
stateMachine.handleEvent(Event.START);
}
}
```
输出结果:
```
Started
Paused
Stopped
Restarted
```
通过以上步骤,我们就实现了一个简单的状态机。在实际开发中,状态机可以用于状态转换较为复杂的场景,例如订单状态、流程状态等。