Heim >Backend-Entwicklung >PHP-Tutorial >Was ist das Zustandsmuster in PHP? Lernen Sie es anhand von Beispielen
Im vorherigen Artikel „Sprechen wir über den Singleton-Modus in PHP“ haben wir den Singleton-Modus in PHP vorgestellt. Der folgende Artikel führt Sie zum Verständnis des Statusmodus im PHP-Designmuster
state Das Muster ist tatsächlich nicht ganz einfach wörtlich zu verstehen. Was bedeutet der Status hier? Status speichern? Das ist nicht der Memomodus. Tatsächlich ist der Zustand hier der Zustand der Klasse. Durch die Änderung eines bestimmten Zustands der Klasse fühlt sich die Klasse wie eine andere Klasse an. Es ist etwas schwer zu sagen, also lernen wir zunächst das Konzept kennen und lesen es dann später.
GoF-Definition: Ermöglicht einem Objekt, sein Verhalten zu ändern, wenn sich sein interner Zustand ändert. Das Objekt scheint seine Klasse geändert zu haben.
GoF-Klassendiagramm. Rufen Sie beim Aufruf von Request() die Handle()-Methode der Statusklasse auf. Der Zweck besteht darin, dass Änderungen im aktuellen Kontextklassenstatus von der externen Statusklasse gesteuert werden.
class Context { private $state; public function SetState(State $state): void { $this->state = $state; } public function Request(): void { $this->state = $this->state->Handle(); } }Abstrakte Zustandsschnittstelle und zwei konkrete Implementierungen. Diese beiden spezifischen Implementierungen rufen sich tatsächlich gegenseitig auf. Der Effekt der Implementierung besteht darin, dass jedes Mal, wenn die Kontextklasse die Request()-Methode aufruft, die interne Zustandsklasse in einen anderen Zustand wechselt. Es ist wie ein Schalter, der zwischen Ein und Aus hin und her schaltet.
interface State { public function Handle(): State; } class ConcreteStateA implements State { public function Handle(): State { echo '当前是A状态', PHP_EOL; return new ConcreteStateB(); } } class ConcreteStateB implements State { public function Handle(): State { echo '当前是B状态', PHP_EOL; return new ConcreteStateA(); } }Die Implementierung des Clients instanziiert das Kontextobjekt, legt den Anfangszustand fest und ruft dann kontinuierlich das Request()-Objekt auf, um den Schaltzustand zu erreichen.
Sehen Sie den Weg? Hier werden die Zustandsänderungen in der externen Implementierungsklasse gekapselt. Der Zustand wird nicht innerhalb des Kontexts oder der Zielklasse umgeschaltet. Dieses Beispiel des Standardklassendiagramms ist tatsächlich zu einfach. Der eigentliche Zweck des Zustandsmusters besteht darin, das komplexe Verschachtelungsproblem nacheinander in die externen Zustandsklassen einzufügen Folgende Beispiele Wir werden sehen, dass
anwendbar ist auf: Das Verhalten eines Objekts hängt von seinem Zustand ab und es muss sein Verhalten entsprechend dem Zustand zur Laufzeit ändern. Eine Operation enthält eine große Anzahl von bedingten Anweisungen mit mehreren Zweigen Diese Zweige hängen vom Zustand des Objekts ab. Die Merkmale des Zustandsmusters sind: Es lokalisiert das Verhalten, das sich auf einen bestimmten Zustand bezieht; , Mitgliedschaftssysteme und OA-Systeme Das heißt, es wird im Prozess verschiedene Statusänderungen geben, und das Statusmodell kann für das Gesamtdesign und die Architektur verwendet werden Wir haben unser eigenes Mall-System im Mobiltelefonsystem angepasst , und Sie können bequem über Ihr Mobiltelefon Bestellungen aufgeben. Kaufen Sie unsere Artikel. Eine Bestellung (Kontext) hat mehrere Status (Status), z. B. unbezahlt, bezahlt, Bestellung abgeschlossen, Bestellung erstattet und viele Status. Wir ordnen diese Zustände den entsprechenden Zustandsklassen zu, um sie zu implementieren. Verschiedene Zustandsklassen rufen beispielsweise nach der Zahlung den Erhalt der Ware und nach der Rückerstattung das Ausfüllen des Käufers ab Das Logistikformular Warten Sie, auf diese Weise kann der Statusmodus in unserem Einkaufszentrum flexibel genutzt werden! !Mitglieder-Rabatttabelle
$c = new Context(); $stateA = new ConcreteStateA(); $c->SetState($stateA); $c->Request(); $c->Request(); $c->Request(); $c->Request();
Hinweis
Wenn Sie den Statusmodus nicht verwenden, müssen wir in der discount()-Methode des Mitglieds möglicherweise viele Ebenen von if...else...-Beurteilungsbedingungen schreiben
Gleichzeitig auch dies bringt immer mehr Methodenerfahrung mit sich Es ist ein Problem, das langwierig und immer schwieriger zu warten ist
Das Zustandsmodell existiert, um dieses Problem zu lösenWenn das Ergebnis des discount()-Verhaltens vom Status des Mitgliedsobjekts selbst abhängt ( Mitgliedschaftspunkte), das Zustandsmodell ist optimal ausgewählt, das heißt, das oben erwähnte Verhalten eines Objekts hängt von seinem Status ab
Originaladresse: https://juejin.cn/post/6844903991562731534
Autor: Hardcore Project ManagerEmpfohlenes Lernen: „PHP-Video-Tutorial“
Das obige ist der detaillierte Inhalt vonWas ist das Zustandsmuster in PHP? Lernen Sie es anhand von Beispielen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!