Design Patterns - State Pattern

Nel modello State il comportamento di una classe cambia in base al suo stato. Questo tipo di modello di progettazione rientra nel modello di comportamento.

In State pattern, creiamo oggetti che rappresentano vari stati e un oggetto contesto il cui comportamento varia al variare del suo oggetto di stato.

Implementazione

Creeremo un'interfaccia di stato che definisce un'azione e classi di stato concrete che implementano l' interfaccia di stato . Il contesto è una classe che porta uno Stato.

StatePatternDemo , la nostra classe demo, utilizzerà gli oggetti Context e state per dimostrare il cambiamento nel comportamento Context in base al tipo di stato in cui si trova.

Passo 1

Crea un'interfaccia.

State.java

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

Passo 2

Crea classi concrete che implementano la stessa interfaccia.

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

Passaggio 3

Crea classe contesto .

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

Passaggio 4

Usa il contesto per vedere il cambiamento nel comportamento quando cambia lo stato .

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

Passaggio 5

Verifica l'output.

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