软件设计模式之状态模式

软件设计模式之状态模式

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

技术开发 编程 技术框架 技术发展

 

软件设计模式之状态模式

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

在状态模式中,类行为根据其状态而变化。这种设计模式属于行为模式。在状态模式中,我们创建表示各种状态的对象和上下文对象,其行为随其状态对象的变化而变化。

实作

我们将创建一个定义操作的State接口和实现State接口的具体状态类。上下文是承载状态的类。

我们的演示类StatePatternDemo将使用Context和状态对象根据所处状态的类型来演示Context行为的变化。

state_pattern_uml_diagram.jpg

第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.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步

使用上下文看在行为改变时状态发生变化。


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

技术开发 编程 技术框架 技术发展