Zustandsdefinition: Verschiedene Zustände, unterschiedliche Verhaltensweisen;
Wann verwendet der Statusmodus
Der Statusmodus wird häufiger bei der tatsächlichen Verwendung verwendet und ist für "Zustandsumschaltung" geeignet. Da wir oft verwenden, wenn sonst sonst sich die Staaten wechseln, müssen wir darüber nachdenken, ob wir den Staatsmodus übernehmen können.
Nicht nur basierend auf dem Status, sondern auch auf den Attributen. Wenn die Eigenschaften eines Objekts unterschiedlich sind, ist das Verhalten des Objekts unterschiedlich. Eigenschaften, solche Änderungen (Wechsel) von Eigenschaften können jederzeit auftreten, sodass es möglich ist, den Zustand zu verwenden.
Im tatsächlichen Gebrauch gibt es viele staatliche Umschaltungen wie Schalter, aber manchmal ist es nicht so offensichtlich, abhängig von Ihrer Erfahrung und Ihrer Tiefe des Verständnisses des Systems.
Wir möchten hier erklären, dass es einige Unterschiede zwischen "Switch -Switching -Status" und "allgemeiner staatlicher Beurteilung" gibt.
Die Codekopie lautet wie folgt:
if (was == 1) state = "Hallo";
sonst wenn (was == 2) state = "hi";
sonst wenn (was == 3) state = "bye";
Dies ist ein "allgemeines staatliches Urteil". Wenn geändert in:
Die Codekopie lautet wie folgt:
if (state.euqals ("bye")) state = "Hallo";
sonst wenn (state.euqals ("Hallo")) state = "hi";
sonst wenn (state.euqals ("hi")) state = "bye";
Dies ist der "Switch -Switching -Status", der den Status des Staates von "Hallo" auf "Hallo" und dann auf "Tschüss" wechseln soll. Der Status kann geändert werden. Der Statusmodus wird verwendet.
Wenn Sie einfach die Richtung "Hallo" wechseln-> "Hallo"-> "Bye"-> "Hallo" im obigen Unterklassen.
Bitte beachten Sie das folgende Beispiel:
Die Codekopie lautet wie folgt:
öffentliche Klassenkontext {
privater Farbzustand = NULL;
public void push () {
// Wenn der aktuelle rote Zustand auf Blau umgestellt ist
if (state == color.red) state = color.blue;
// Wenn der aktuelle blaue Zustand auf Grün umgestellt ist
sonst if (state == color.blue) state = color.green;
// Wenn der aktuelle schwarze Zustand auf rot umgestellt ist
sonst if (state == color.black) state = color.red;
// Wenn der aktuelle grüne Zustand auf schwarz umgestellt ist
sonst if (state == color.green) state = color.black;
Probe Probe = neue Probe (Zustand);
Probe.operate ();
}
public void pull () {
// Es ist genau das Gegenteil von Push -Status -Switching, wenn (state == color.green) state = color.blue;
sonst if (state == color.black) state = color.green;
sonst if (state == color.blue) state = color.red;
sonst wenn (state == color.red) state = color.black;
Sample2 Sample2 = neuer Sample2 (Zustand);
Sample2.operate ();
}
}
Im obigen Beispiel haben wir zwei Aktionen, die Pull und diese beiden Schalteraktionen den Kontextfarbe verändern.
Beachten Sie jedoch, dass der Zustandsänderung nur eine einfache Farbzuordnung ist. Verwenden Sie.
Zum Beispiel: Bankkonten wechseln häufig zwischen dem offenen Staat und dem Schlussstaat.
Zum Beispiel: Die klassische TCPConnection hat der Zustand von TCP drei Zustände: Erstellen von Hörverschlüssen und wiederholten Konvertierungen.
Zum Beispiel: Das Postfach -Pop -Konto hat vier Staaten, starten Sie den Hudusername autorisierte Beendigung. Das entsprechende Verhalten jedes Staates sollte relativ groß und für die Verwendung von Status geeignet sein.
Beispiel: Auswahl verschiedener Tools in der Toolbox kann als Umschalten zwischen verschiedenen Tools angesehen werden, die für die Verwendung von Status geeignet sind. Wenn Sie beispielsweise über ein bestimmtes Zeichnungsprogramm verfügen, können Benutzer verschiedene Tools auswählen, um die Box gerade Kurve zu zeichnen.
So verwenden Sie den Statusmodus
Der Staat verlangt zwei Arten von Unternehmen, um teilzunehmen:
1.State Manager Der State Manager ist ein Switch.
2. Die von abstrakten Klassen oder Schnittstellen implementierte übergeordnete Klasse erben verschiedene Zustände verschiedene Unterklassen dieser übergeordneten Klasse.
Wenn wir den obigen Kontext als Beispiel nehmen, möchten wir ihn ändern und zwei Arten von Entitäten erstellen.
Der erste Schritt besteht darin, eine übergeordnete Klasse zu erstellen:
Die Codekopie lautet wie folgt:
public abstract Class State {
öffentliches abstraktes voides Handwerk (Kontext C);
public abstract void Handle Pull (Kontext C);
public abstract void getColor ();
}
Die Methoden in der übergeordneten Klasse müssen dem Switch -Verhalten im State Manager entsprechen. muss speziell behandelt werden.
Im Folgenden sind die Implementierungen bestimmter Unterklassen aufgeführt:
Die Codekopie lautet wie folgt:
Die öffentliche Klasse Bluestate erweitert den Zustand {
public void handlepush (Kontext c) {
// nach Push -Methode "Wenn es blau ist, wechseln Sie zu Grün";
C.SetState (New Greenstate ());
}
public void Handle Pull (Kontext c) {
// nach der Pull -Methode "Wenn es blau ist, wechseln Sie zu Rot";
C.SetState (New RedState ());
}
public abstract void getColor () {return (color.blue)}
}
In ähnlicher Weise werden Unterklassen in anderen Zuständen als blau implementiert.
Der zweite Schritt besteht darin, den Staatsmanager umzuschreiben, der der Kontext dieses Beispiels ist:
Die Codekopie lautet wie folgt:
Ublic -Klassenkontext {
Privat Sate State = NULL;
// setState wird verwendet, um den Zustandszustand mithilfe von SetState zu ändern, um eine Zustandsschaltung zu erreichen
pulic void setState (Zustandszustand) {
this.state = Status;
}
public void push () {
// Die Details des Zustandsumschusses sind in diesem Fall die Farbänderung, die im Handel der Unterklasse eingekapselt wurde, und es besteht keine Notwendigkeit, sich um den Zustand zu kümmern.Handlepush (dies).
// Da die Probe ein Umschaltergebnis in Status verwenden muss, verwenden Sie GetColor ()
Probe Stichprobe = neue Probe (state.getColor ());
Probe.operate ();
}
public void pull () {
State.Handlepull (dies);
Sample2 Sample2 = neuer Sample2 (state.getColor ());
Sample2.operate ();
}
}
Zu diesem Zeitpunkt haben wir den Refactoring -Prozess des Staates implementiert.
Das obige ist nur ein ziemlich einfaches Beispiel.