阅读量:2
状态模式是一种行为型设计模式,它允许一个对象在其内部状态改变时改变它的行为。在状态模式中,对象的行为是由其状态决定的。
下面是一个简单的状态模式的实现步骤:
- 定义一个状态接口(State),该接口声明了对象的行为方法。
- 实现状态接口的具体状态类,每个具体状态类实现了状态接口中的行为方法。
- 在上下文类(Context)中持有一个状态对象,该对象可以切换不同的状态。
- 在上下文类中提供一个方法(例如setState)来切换状态。
- 在上下文类中根据当前状态调用对应的行为方法。
下面是一个简单的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); } } class StopState implements State { public void doAction(Context context) { System.out.println("Player is in stop state"); context.setState(this); } } // 上下文类 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); StopState stopState = new StopState(); stopState.doAction(context); } }
运行以上代码,输出结果为:
Player is in start state Player is in stop state
在上面的示例中,状态接口State定义了一个行为方法doAction,StartState和StopState是具体的状态类,它们分别实现了doAction方法。上下文类Context持有一个状态对象,可以切换不同的状态。在测试代码中,我们首先创建一个Context对象,然后创建一个StartState对象,并通过doAction方法将Context对象的状态切换为StartState;然后创建一个StopState对象,并通过doAction方法将Context对象的状态切换为StopState。