开发手册 欢迎您!
软件开发者资料库

设计模式 - 状态模式

设计模式状态模式 - 通过简单易用的步骤学习Java设计模式:初学者教程,包含从工厂模式,抽象工厂,单例,构建器,原型,适配器,桥,过滤器,复合,装饰器开始的Java设计模式的完整知识外立面,Flyweight,代理,命令,口译员,迭代器,调解员,纪念品,观察员,状态,空对象,战略,模板,访客,MVC,前端控制器等。

在状态模式中,类行为会根据其状态而更改.这种类型的设计模式属于行为模式.

在状态模式中,我们创建表示各种状态的对象和一个上下文对象,其行为随着状态对象的变化而变化.

实现

我们将创建一个 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步

创建上下文 Class.

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

使用上下文 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 stateStart StatePlayer is in stop stateStop State