状态模式

作者: 4ea0af17fd67 | 来源:发表于2017-08-11 11:25 被阅读6次

    定义

    在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。
    在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。

    实现

    我们将创建一个 State 接口和实现了 State 接口的实体状态类。Context 是一个带有某个状态的类。
    StatePatternDemo,我们的演示类使用 Context 和状态对象来演示 Context 在状态改变时的行为变化。

    步骤 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
    

    相关文章

      网友评论

        本文标题:状态模式

        本文链接:https://www.haomeiwen.com/subject/zgelrxtx.html