设计模式 状态模式

  • 设计模式 - 状态模式

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

    我们将创建一个定义操作的State接口和实现State接口的具体状态类。Context是承载State的类。
    我们的演示类StatePatternDemo将使用Context和State对象根据所处状态的类型来演示Context行为的变化。
    dp
    第1步 - 创建一个接口。 State.java
    
    public interface State {
       public void doAction(Context context);
    }
    
    第2步 - 创建实现相同接口的具体类。 StartState.java, StopState.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";
       }
    }
    
    
    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