Latest web development tutorials

Zustandsmuster

Im Zustandsmodus (State-Muster) wird das Verhalten der Klasse basierend auf seinen Status geändert. Diese Art von Entwurfsmustern gehören Verhaltensmuster.

Im Zustandsmodell schaffen wir Objekte und eine Vielzahl von Verhaltenszustände zusammen mit Zustand des Objekts ändert verändert Kontext Objektdarstellung.

Einführung

Absichten: Gibt einem Objekt sein Verhalten im internen Zustand zu ändern geändert wird , erscheint das Objekt seiner Klasse zu ändern.

Vor allem zu lösen: das Verhalten eines Objekts auf ihren Zustand (Attribute) abhängig ist , und Sie können es Verhaltensänderung entsprechend seiner zustandsbezogene ändern.

Wann verwendet: Code enthält eine große Anzahl von Objekten auf den Status von bedingten Anweisungen im Zusammenhang.

Wie zu beheben: Der Status bestimmter Klassen abstrakt.

Der Schlüsselcode: der Befehlsmodus - Schnittstelle in der Regel nur eine Methode.Der Status der Schnittstelle, die ein oder mehrere Verfahren besitzt. Darüber hinaus ist die Methode der Umsetzung Klasse Zustandsmodus, in der Regel der Rückgabewert oder den Wert einer Instanzvariablen ändern. Das heißt, der Zustand und der Zustand des Objektmodells ist in der Regel relevant. Die Umsetzung Klassenmethoden haben unterschiedliche Funktionen, Schnittstellen-Methoden abgedeckt. Staat und dem Befehlsmodus das gleiche kann auch andere Bedingungen zu beseitigen, verwendet werden, wenn ... sonst Auswahlanweisung.

Anwendungsbeispiele: 1, Basketballspieler , kann einen normalen Zustand haben, nicht den normalen Zustand und anormalen Zustand.2, Marquis Yi von Zeng Glocken, die Uhr ist die abstrakte Schnittstelle "," Takt A 'und anderen spezifischen Zustand "Bianzhong spezifischen Umgebung (Kontext).

Vorteile: 1, kapselt die Transformationsregeln.2, aufzuzählen möglichen Zustände vor Aufzählung Zustand den Status von Arten zu bestimmen muss. 3, die alle mit einem zustandsbezogene Verhalten in einer Klasse, und Sie können neue Staat leicht hinzufügen, müssen nur den Zustand eines Objekts zu ändern, kann das Verhalten von Objekten ändern. 4, so dass der Zustandsübergang logischen Zustand des Objekts in einem, anstatt einen großen Block von bedingten Anweisungen. 5, können mehrere Objekte einen Zustand Objektumgebung teilen, wodurch die Anzahl der Objekte in dem System zu reduzieren.

Nachteile: 1, wird der Zustand Nutzungsmuster gebunden , die Anzahl der Systemklassen und Objekten zu erhöhen.2, die Struktur und die Umsetzung des Zustandsmuster sind komplexer, wenn Verwirrung Programmstruktur und Code falsch verursachen verwendet werden. 3, Unterstützung für den Staat Muster "Open Geschlossen-Prinzip" ist nicht sehr gut, können Sie den Zustand des Zustandsmodells, das Hinzufügen neuer Klassen wechseln müssen den Status der Verantwortlichen für die Zustandsübergänge des Quellcodes, oder kann nicht geändert werden, um den neuen Zustand zu ändern und ändern ein Zustand Klasse handeln müssen auch den Quellcode der entsprechenden Klasse zu ändern.

Einsatzszenarien: 1, mit der Zustandsänderung Verhalten und Szenenwechsel.2, bedingte Sprunganweisung Ersatz.

Hinweis: Wenn Sie einen eingeschränkten Zustand Verhalten durch State - Modus verwenden, und der Staat ist nicht mehr als fünf.

Realisierung

Wir werden einestaatlicheEinrichtung Status - Schnittstelle und Implementierung KlasseStaat- Schnittstelle erstellen. DerKontextist eine Klasse mit einem bestimmten Zustand.

StatePatternDemo,zeigen wir die Verwendung von Klasse und StatusKontextKontextobjekte Verhaltensänderung im Zustand der Veränderung zu demonstrieren.

Zustandsmuster UML-Diagramm

Schritt 1

Erstellen Sie eine Schnittstelle.

State.java

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

Schritt 2

Erstellen von Entity-Klasse, die die Schnittstelle implementiert.

StartState.java

public class StartState implementiert Staat {

   public void doAction (Context Kontext) {
      System.out.println ( "Der Spieler ist in Startzustand");
      context.setState (this);	
   }

   public String toString () {
      Rückkehr "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 SieContext- Klasse.

Context.java

public class Kontext {
   Privat Staat Zustand;

   öffentlichen Kontext () {
      state = null;
   }

   public void setState (State-Zustand) {
      this.state = Zustand;		
   }

   public Staat getState () {
      Rückkehr Zustand;
   }
}

Schritt 4

VerwendenKontextdas Verhalten , um zu sehen , wenn der ZustandZustandsänderungenändert.

StatePatternDemo.java

public class StatePatternDemo {
   public static void main (String [] args) {
      Context context = neuen Kontext ();

      StartState startState = new StartState ();
      startState.doAction (Kontext);

      System.out.println (context.getState () toString ().);

      StopState stopState = new StopState ();
      stopState.doAction (Kontext);

      System.out.println (context.getState () toString ().);
   }
}

Schritt 5

Stellen Sie sicher, ausgegeben.

Der Spieler ist in Startzustand
Start Status
Der Spieler ist im Stop-Zustand
Stop-Zustand