1. Übersicht
Wenn es mehrere Zustände für ein Objekt im System gibt, kann der Zustand zwischen ihnen umgewandelt werden und das Objekt verhält sich in verschiedenen Zuständen unterschiedlich. Der Statusmodus trennt den Status eines Objekts von dem Objekt und verkauft ihn in eine spezielle Zustandsklasse, so dass der Objektzustand flexibel geändert werden kann. Der Statusmodus ist ein Objektverhaltensmodus.
2. Anwendbare Szenarien
Wird verwendet, um das Einkapselungsproblem mehrerer Zustandsübergänge komplexer Objekte im System und Verhaltensweisen unter verschiedenen Zuständen zu lösen. Einfach ausgedrückt, es geht darum, mit mehreren Zuständen von Objekten und ihren gegenseitigen Konvertierungen umzugehen.
III. UML -Klassendiagramm
4. Teilnehmer
1), AbstractState (Abstract State Class):
Die abstrakte Zustandsklasse definiert die Verhaltensmethoden unter verschiedenen Zuständen, und verschiedene Verhaltensvorgänge werden in Unterklassen (verschiedene staatliche Unterklassen) implementiert.
2) KonkretState (Zustandsunterklasse, die Verhalten in bestimmten Zuständen implementiert):
Unterklassen abstrakter Zustandsklassen implementieren jede Unterklasse ein Verhalten, das sich auf einen Zustand der Umgebungsklasse (Kontext) bezieht. Jede spezifische Zustandsklasse entspricht einem bestimmten Umweltzustand, und das Verhalten verschiedener spezifischer Zustände ist unterschiedlich.
3) Kontext (Umgebungsklasse, die Staatsobjekte besitzt):
Aufgrund der Vielfalt der Umwelt kann staatliche Attribute unterschiedliche Zustände haben und sich unter verschiedenen Staaten unterschiedlich verhalten. Behalten Sie eine abstrakte staatliche Instanz in der Umweltklasse bei. Diese Instanz definiert den Stand der aktuellen Umgebung (setState () -Methode) und trennt das spezifische Zustandsverhalten und wird durch verschiedene staatliche Unterklassen abgeschlossen.
5. Anwendungsfalllernen
1.. Abstrakte Zustandsklasse: State.java
/ *** Zustandsmodus des Java -Designmusters* Abstract State Class* @Author [email protected]**/ public abstract Class State {/ *** Statusische Verhaltensmethode des Zustands, die spezifische staatliche Unterklasse implementiert unterschiedliche Verhaltenslogik*/ public abstract Void Verhalten (); }
2. Spezifische Zustandsunterklasse A: Concretestatea.java
/ ** * Spezifische Status -Unterklasse A * @Author [email protected] */ Public Class Concretestatea erweitert den Zustand {@Override public void Behaviour () {// Geschäftsverhalten von Staat A, und was kann es tun, wenn es in diesem Zustand ist. Zahlung"); }}
1. Spezifische Zustandsunterklasse B: ConcretestateB.java
/ ** * Spezifische staatliche Unterklasse B * @Author [email protected] * */ public class ConcretestateB erweitert den Status {@Override public void Behaviour () {// Geschäftsverhalten des Staates B und was kann es tun, wenn es in diesem Zustand // staatlich ist. }}
4. Umweltklasse mit Staatsobjekten: context.java
/** * Umgebung/Kontextklasse <br/> * hat ein staatliches Objekt und kann den Übergang zwischen Staaten vervollständigen [Zustandsänderungen/Umschaltungen wird in der Umgebungsklasse implementiert] * @Author [email protected] * */öffentliche Klasse Kontext {// einen Verweis auf einen privaten Staat des abstrakten Zustands für den Zustand des staatlichen Zustands beibehalten; / * * Simulieren Sie die Attribute für das Handy -Anrufgebühren <br/> * Der Umgebungsstatus lautet wie folgt: * 1> Wenn Bill> = 0,00 $: Wenn der Staat normal ist, können Sie immer noch Anrufe tätigen * 2>, wenn die Rechnung <0,00 $: Wenn das Telefon geschuldet wird, können Sie keine Anrufe tätigen */private Double Bill. /*** Umgebungsverarbeitungsfunktion und aufgerufenes Verhalten des Statusinstanz vervollständigt die Geschäftslogik <br/>* Verweise auf verschiedene Verhaltensweisen in verschiedenen Zuständen*/public void handle () {techeState (); State.Behavior (); }/*** Überprüfen Sie den Umgebungszustand: Statusänderungen/Umschaltungen werden in der Umgebungsklasse implementiert. } else {setState (new concretestateB ()); }}/** * Legen Sie den Umgebungszustand ein. } public double getbill () {return bill; } public void setbill (double bill) {this.bill = bill; }}
5. Test Client Calling Class: Client.java
öffentliche Klasse Client {public static void main (String [] args) {context context = new context (); context.setBill (5.50); System.out.println ("aktueller Anrufgebührsaldo:" + context.getBill () + "$"); context.handle (); context.setBill (-1,50); System.out.println ("aktueller Anrufgebührsaldo:" + context.getBill () + "$"); context.handle (); context.setbill (50.00); System.out.println ("aktueller Anrufgebührsaldo:" + context.getBill () + "$"); context.handle (); }} 6. Programmbetriebsergebnisse:
Aktueller Anrufgebührsaldo: 5,5 $
Der aktuelle Telefonrechnungsguthaben kann normal erfolgen, wenn das Telefon aufgrund der Anzahlung nicht sinkt: -1,5 $
Der aktuelle Telefongebührsguthaben darf keine Anrufe tätigen, wenn das Telefon nicht in Betrieb ist.
Das Telefon kann telefonisch ohne Zahlung Anrufe tätigen
Vi. Expandieren
Es gibt zwei verschiedene Implementierungen des staatlichen Umschaltens im Zustandsmodus
Methode 1: Änderung/Umschalten des Status wird in der Umgebungsklasse implementiert. Wie im obigen Anwendungsfallcode ist die Methode checkstate () in der Kontextklasse.
/*** Überprüfen Sie den Umgebungszustand: Statusänderungen/Umschaltungen werden in der Umgebungsklasse implementiert. } else {setState (new concretestateB ()); }} Methode 2: Änderung/Umschalten des Zustands wird in einer bestimmten Zustandsunterklasse implementiert.
Die Implementierungsschritte sind wie folgt:
1) Initialisieren Sie ein Statusinstanzobjekt in der Umgebungsklassenkontextklasse und geben Sie das Umgebungskontextobjekt als Konstruktorparameter des Subklassenstatus an die spezifische Status -Subklassinstanz weiter.
Zum Beispiel in der Klasse context.java
// Setzen Sie den Anfangszustand this.state = new Concretestatea (this);
2) In der spezifischen Unterklasse -Zustandsklasse beurteilt der Geschäftslogik gemäß dem konstruierten Kontextobjekt den Status, indem er den Eigenschaftswert des Kontextobjekts bezeichnet.
Zum Beispiel in der Klasse Concretestatea.java die spezifische staatliche Unterklasse:
/ ** * Spezifische staatliche Unterklasse A * @Author [email protected] */ public class Concretestatea erweitert den Zustand {privater Kontext ctx; public concretestatea (Kontextkontext) {ctx = context; } @Override public void Behavior () {// Geschäftsverhalten von Status A, und was kann es tun, wenn es in diesem Status ist // zum Beispiel: Das Mobiltelefon kann Anrufe normalerweise tätigen, wenn es aufgrund des Anzahlungssystems nicht sinkt. checkstate (); }/** * Überprüfen Sie, ob der Zustand konvertiert werden muss }}}
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.