java 状态模式 例子
时间: 2023-05-18 16:06:25 浏览: 68
一个简单的 Java 状态模式的例子是:假设有一个游戏,玩家可以控制一个角色进行攻击、防御、逃跑等操作。我们可以使用状态模式来管理角色的状态,例如创建一个 State 接口,包含攻击、防御、逃跑等方法,然后创建不同的状态类实现该接口,例如 AttackState、DefenseState、EscapeState 等。在角色进行不同操作时,我们可以根据当前状态调用相应的方法,例如当角色处于攻击状态时,调用 AttackState 的攻击方法。这样可以使代码更加清晰、易于维护。
相关问题
java状态模式例子
状态模式是一种常用的设计模式,它可以用于解决软件系统中多种状态下行为互异的情况。在Java中,可以通过定义抽象状态类和具体状态类来实现状态模式。
首先,我们需要定义一个抽象状态类,它可以是一个抽象类或者接口,用于定义状态抽象方法。例如:
```java
public abstract class State {
public abstract void handle(Context context);
}
```
接下来,我们可以定义具体的状态类,它们是抽象状态类的实现者,每个具体状态类对应着不同的状态,并实现了对应的状态处理逻辑。例如:
```java
public class ConcreteStateA extends State {
public void handle(Context context) {
// 具体状态A的处理逻辑
}
}
public class ConcreteStateB extends State {
public void handle(Context context) {
// 具体状态B的处理逻辑
}
}
```
然后,我们还需要定义一个环境类(Context),它拥有各种不同状态的对象,并负责调用状态类接口。例如:
```java
public class Context {
private State state;
public void setState(State state) {
this.state = state;
}
public void handle() {
state.handle(this);
}
}
```
在使用状态模式时,我们可以通过设置环境类的状态来实现不同状态下的行为变化。例如:
```java
public class Main {
public static void main(String[] args) {
Context context = new Context();
State stateA = new ConcreteStateA();
context.setState(stateA);
context.handle(); // 调用具体状态A的处理逻辑
State stateB = new ConcreteStateB();
context.setState(stateB);
context.handle(); // 调用具体状态B的处理逻辑
}
}
```
java 状态模式 代码例子
以下是一个简单的 Java 状态模式的代码例子:
// 状态接口
interface State {
void doAction(Context context);
}
// 具体状态类
class StartState implements State {
public void doAction(Context context) {
System.out.println("Player is in start state");
context.setState(this);
}
public String toString() {
return "Start State";
}
}
class StopState implements State {
public void doAction(Context context) {
System.out.println("Player is in stop state");
context.setState(this);
}
public String toString() {
return "Stop State";
}
}
// 上下文类
class Context {
private State state;
public Context() {
state = null;
}
public void setState(State state) {
this.state = state;
}
public State getState() {
return state;
}
}
// 测试类
public class StatePatternDemo {
public static void main(String[] args) {
Context context = new Context();
StartState startState = new StartState();
startState.doAction(context);
System.out.println(context.getState().toString());
StopState stopState = new StopState();
stopState.doAction(context);
System.out.println(context.getState().toString());
}
}