欢迎您 本站地址:  

状态模式

在状态模式(State Pattern)中,类的行为是基于它的状态改变的,这种类型的设计模式属于行为型模式。

在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。

状态模式允许对象在内部状态改变时改变其行为,使得对象在不同的状态下有不同的行为表现。通过将每个状态封装成独立的类,可以避免使用大量的条件语句来实现状态切换。

介绍

意图

允许一个对象在其内部状态改变时改变其行为,看起来就像是改变了其类一样。

主要解决的问题

使用场景

实现方式

关键代码

应用实例

优点

缺点

使用建议

注意事项

结构

状态模式包含以下几个主要角色:

实现

我们将创建一个 State 接口和实现了 State 接口的实体状态类。Context 是一个带有某个状态的类。

StatePatternDemo,我们的演示类使用 Context 和状态对象来演示 Context 在状态改变时的行为变化。

状态模式的 UML 图

步骤 1

创建一个接口。

State.java

public interface State { public void doAction(Context context); }

步骤 2

创建实现接口的实体类。

StartState.java

public 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"; } }

StopState.java

public 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"; } }

步骤 3

创建 Context 类。

Context.java

public class Context { private State state; public Context(){ state = null; } public void setState(State state){ this.state = state; } public State getState(){ return state; } }

步骤 4

使用 Context 来查看当状态 State 改变时的行为变化。

StatePatternDemo.java

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()); } }

步骤 5

执行程序,输出结果:

Player is in start state
Start State
Player is in stop state
Stop State

更多文章

小库提示

扫描下方二维码,访问手机版。