Entwurfsmuster - Zustandsmuster

Im Statusmuster ändert sich das Verhalten einer Klasse basierend auf ihrem Status. Diese Art von Entwurfsmuster fällt unter Verhaltensmuster.

Im Statusmuster erstellen wir Objekte, die verschiedene Status darstellen, und ein Kontextobjekt, dessen Verhalten sich ändert, wenn sich das Statusobjekt ändert.

Implementierung

Wir werden eine erstellen staatliche Schnittstelle definiert eine Aktion und konkrete Zustandsklassen der Umsetzung des Staat Schnittstelle. Kontext ist eine Klasse, die einen Zustand trägt.

StatePatternDemo , unsere Demo - Klasse, verwenden Kontext und Statusobjekte zu demonstrieren Veränderung im Kontext Verhalten nach der Art der Zustand es sich befindet.

Schritt 1

Erstellen Sie eine Schnittstelle.

State.java

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

Schritt 2

Erstellen Sie konkrete Klassen, die dieselbe Schnittstelle implementieren.

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

Schritt 3

Erstellen Context - Klasse.

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

Schritt 4

Verwenden Sie den Kontext , um Verhaltensänderungen zu sehen, wenn sich der Status ändert.

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

Schritt 5

Überprüfen Sie die Ausgabe.

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