Das Beobachtermuster verstehen
Kernpunkte
- Observer-Muster ist ein Verhaltensdesignmuster, das eine Eins-zu-Viele-Beziehung zwischen Objekten herstellt.
- Dieser Modus enthält ein Thema (oder Verlag) und Beobachter (oder Abonnenten). Das Subjekt informiert den Beobachter über eine Änderung des Status und der Beobachter kann entsprechend handeln. Dieser Modus fördert die lose Kopplung, wodurch das System flexibler und einfacher zu ändern oder erweitert wird. Die Observer -Klasse bietet eine
- -Methode, die das Subjekt fordert, um ihre Zustandsänderungen zu informieren. Die Hauptmethoden zur Definition von Themenklassen:
update()
,attach()
,detach()
undsetState()
werden verwendet, um Beobachter zu verwalten und sie über Statusänderungen zu informieren.notify()
Der Beobachtermodus eignet sich für Situationen, in denen Änderungen an einem Objekt Änderungen an anderen Objekten erfordern, insbesondere wenn die Anzahl der zu ändernden Objekte unbekannt ist. Es kann verwendet werden, um die Konsistenz zwischen verwandten Objekten aufrechtzuerhalten, ohne sie fest zu koppeln. Zum Beispiel wird es verwendet, um den Authentifizierungsmechanismus des Portals mit der Forum -Software zu verknüpfen, sodass Benutzer sich mit einem einzigen Anmeldung bei beiden anmelden können.
Beobachtermodus
Observer-Muster (auch als Publish-Subscribe-Muster bezeichnet) ist ein Verhaltensdesignmuster, das Eins-zu-Viele-Beziehungen zwischen Objekten definiert, sodass bei einem Objekt sein Zustand automatisch benachrichtigt und aktualisiert werden. In meinem Fall habe ich diesen Modus verwendet, um den Authentifizierungsmechanismus des Portals mit der Forum -Software zu verknüpfen. Das Verhalten der Anmeldung im Portal löst den Benutzer auch automatisch dazu, sich im Forum anzumelden. Objekte, die eine Eins-zu-Viele-Beziehung zu anderen Objekten haben, die an ihrem eigenen Zustand interessiert sind, werdenThema oder Publisher bezeichnet. Sein Abhängigkeitsobjekt wird als Observer oder Abonnent bezeichnet. Wenn sich der Zustand des Subjekts ändert, wird der Beobachter benachrichtigt und kann entsprechend handeln. Ein Thema kann eine beliebige Anzahl von abhängigen Beobachtern haben, die Benachrichtigungen an diese Beobachter senden, und eine beliebige Anzahl von Beobachtern kann sich dem Thema abonnieren, um solche Benachrichtigungen zu erhalten.
Beobachterkategorie Die Observer -Klasse bietet eine
-Methode, die das Subjekt anruft, um seine Zustandsänderungen zu informieren. In diesem Beispiel habe ich die update()
-Methode als spezifische Methode definiert. Wenn Sie möchten, können Sie die Methode hier als abstrakte Methode definieren und dann eine konkrete Implementierung in der Unterklasse des Beobachters bereitstellen. update()
<?php abstract class Observer { public function __construct($subject = null) { if (is_object($subject) && $subject instanceof Subject) { $subject->attach($this); } } public function update($subject) { // 查找具有状态名称的观察者方法 if (method_exists($this, $subject->getState())) { call_user_func_array(array($this, $subject->getState()), array($subject)); } } }
Methode akzeptiert Instanzen beobachtbarer Themen und verbindet sich dem Thema - ich werde später darüber sprechen. Die __construct()
-Methode ruft den aktuellen Stand des Themas ab und nutzt sie, um eine unterklassige Beobachtermethode mit demselben Zustandsnamen aufzurufen. In meinem speziellen Fall muss ich die vorhandene Auth -Klasse des Portals als beobachtbares Thema erstellen und eine konkrete Beobachter -Unterklasse erstellen, um eine Verbindung zum Authentifizierungscode des Forums herzustellen. Meine Unterklasse muss auch die Methode mit dem Status des Themas implementieren. update()
Themenkategorie Die Betreffklasse ist auch eine abstrakte Klasse, die vier Hauptmethoden definiert:
,, attach()
, detach()
und setState()
. Zur Bequemlichkeit habe ich auch die Methoden notify()
und getState()
hier hinzugefügt. getObservers()
<?php abstract class Subject { protected $observers; protected $state; public function __construct() { $this->observers = array(); $this->state = null; } public function attach(Observer $observer) { $i = array_search($observer, $this->observers); if ($i === false) { $this->observers[] = $observer; } } public function detach(Observer $observer) { if (!empty($this->observers)) { $i = array_search($observer, $this->observers); if ($i !== false) { unset($this->observers[$i]); } } } public function getState() { return $this->state; } public function setState($state) { $this->state = $state; $this->notify(); } public function notify() { if (!empty($this->observers)) { foreach ($this->observers as $observer) { $observer->update($this); } } } public function getObservers() { return $this->observers; } }
Methode zeichnet den Beobachter ein Thema ab, damit alle staatlichen Änderungen mitgeteilt werden können. Die attach()
-Methode beschreibt den Beobachter aus dem Thema, so dass es die Zustandsänderungen des Themas nicht mehr beobachtet. Die detach()
-Methode legt den aktuellen Status des Themas fest und ruft setState()
auf, um den Beobachter zu aktualisieren, dh eine Benachrichtigung an jeden Beobachter auszustellen. Die notify()
-Methoden aktualisieren jedes abonnierte Objekt, indem die interne Liste durch Iterien durch Iterien durchgeführt und die notify()
-Methode jedes Mitglieds aufgerufen wird. Die Methoden update()
und getState()
sind nur Helferfunktionen, die den Status des aktuellen Themas und die Observer -Liste zurückgeben. getObservers()
sorgfältig hinzufügen ... integrieren Sie
Jetzt mit der abstrakten Basisklasse für Beobachter und Themen konnte ich die Forum -Software in mein vorhandenes Webportal integrieren. Ich muss die Auth -Klasse des Portals so festlegen, dass es sich um beobachtbares Thema handelt, und seinen beobachtbaren Status festlegen, wenn sich der Benutzer anmeldet oder sich aus dem Portal anmeldet.
<?php class Auth extends Subject { function login() { // 执行登录身份验证的现有代码 // ... // 向任何观察者发出信号,表明用户已登录 $this->setState("login"); } function logout() { // 执行用户注销时执行某些操作的现有代码 // 例如销毁会话等... // 向任何观察者发出信号,表明用户已注销 $this->setState("logout"); } }
in den Methoden login()
und logout()
hinzugefügt. Um den Beobachter zu unterklassen, habe ich eine Auth_forumhook -Klasse erstellt, die dafür verantwortlich ist, die API -Anmeldungs- und Abmeldenfunktionen des Forums aufzurufen. setState()
<?php class Auth_ForumHook extends Observer { function login($subject) { // 调用论坛的 API 函数以登录用户 // ... } function logout($subject) { // 调用论坛的 API 函数以注销用户 // ... } }
<?php abstract class Observer { public function __construct($subject = null) { if (is_object($subject) && $subject instanceof Subject) { $subject->attach($this); } } public function update($subject) { // 查找具有状态名称的观察者方法 if (method_exists($this, $subject->getState())) { call_user_func_array(array($this, $subject->getState()), array($subject)); } } }
Dies sind alle meine zusätzlichen Codierungsbedürfnisse neben der Vorbereitung abstrakter Beobachter und Fachklassen. Alle Statusänderungen, die durch die Methoden von Auths login()
und logout()
ausgelöst werden, informieren den Beobachter des Auth_forumhooks und melden sich automatisch vom Benutzer im Forum an oder melden Sie sich automatisch an. So fügen Sie einen neuen Beobachter hinzu, um sich beispielsweise beim Tracker anzumelden, um aufzuzeichnen, wenn sich ein Benutzer anmeldet oder sich aus dem Portal anmeldet, einfach eine bestimmte Beobachterklasse angeben und es dem Auth -Thema anhängen, ohne die Methoden login()
und logout()
des vorhandenen Auth -Objekts weiter zu ändern.
Zusammenfassung
Wenn Sie mehrere Objekte haben, die von einem anderen Objekt abhängen und Operationen ausführen müssen, wenn sich der Status dieses Objekts ändert oder ein Objekt andere Objekte benachrichtigen muss, ohne zu wissen, wer oder wie viele sie sind, ist das Beobachtermuster ein geeignetes und anwendbares Designmuster. In diesem Artikel zeige ich Ihnen das grundlegende Thema des Themas und Beobachtungsmusters und stelle konkrete Beispiele für die einfache Erweiterung der Funktionalität einer vorhandenen Klasse mit diesem Verhaltensmuster an, ohne neue Anforderungen streng zu koppeln. Dieses Muster ermöglicht es Ihnen, eine höhere Konsistenz zwischen verwandten und abhängigen Objekten zu erreichen, ohne die Wiederverwendbarkeit Ihres Codes zu beeinträchtigen.
Bilder von Jpf / Shutterstock
(Der nachfolgende FAQs -Abschnitt wurde aufgrund der Länge des Artikels weggelassen. Der Kerninhalt wurde neu organisiert und poliert.)
Das obige ist der detaillierte Inhalt vonDas Beobachtermuster verstehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Die Aufzählungsfunktion in Php8.1 verbessert die Klarheit und Type des Codes, indem benannte Konstanten definiert werden. 1) Aufzählungen können Ganzzahlen, Zeichenfolgen oder Objekte sein, die die Lesbarkeit der Code und die Type der Type verbessern. 2) Die Aufzählung basiert auf der Klasse und unterstützt objektorientierte Merkmale wie Traversal und Reflexion. 3) Die Aufzählung kann zum Vergleich und zur Zuordnung verwendet werden, um die Sicherheit der Typ zu gewährleisten. 4) Aufzählung unterstützt das Hinzufügen von Methoden zur Implementierung einer komplexen Logik. 5) Strenge Typ Überprüfung und Fehlerbehandlung können häufig auftretende Fehler vermeiden. 6) Die Aufzählung verringert den magischen Wert und verbessert die Wartbarkeit, achten Sie jedoch auf die Leistungsoptimierung.

Die Hijacking der Sitzung kann in den folgenden Schritten erreicht werden: 1. Erhalten Sie die Sitzungs -ID, 2. Verwenden Sie die Sitzungs -ID, 3. Halten Sie die Sitzung aktiv. Zu den Methoden zur Verhinderung der Sitzung der Sitzung in PHP gehören: 1. Verwenden Sie die Funktion Session_regenerate_id (), um die Sitzungs -ID zu regenerieren. 2. Store -Sitzungsdaten über die Datenbank, 3. Stellen Sie sicher, dass alle Sitzungsdaten über HTTPS übertragen werden.

Die Anwendung des soliden Prinzips in der PHP -Entwicklung umfasst: 1. Prinzip der Einzelverantwortung (SRP): Jede Klasse ist nur für eine Funktion verantwortlich. 2. Open and Close Principle (OCP): Änderungen werden eher durch Erweiterung als durch Modifikation erreicht. 3.. Lischs Substitutionsprinzip (LSP): Unterklassen können Basisklassen ersetzen, ohne die Programmgenauigkeit zu beeinträchtigen. 4. Schnittstellen-Isolationsprinzip (ISP): Verwenden Sie feinkörnige Schnittstellen, um Abhängigkeiten und nicht verwendete Methoden zu vermeiden. 5. Abhängigkeitsinversionsprinzip (DIP): Hoch- und niedrige Module beruhen auf der Abstraktion und werden durch Abhängigkeitsinjektion implementiert.

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Die RESTAPI -Designprinzipien umfassen Ressourcendefinition, URI -Design, HTTP -Methodenverbrauch, Statuscode -Nutzung, Versionskontrolle und Hassoas. 1. Ressourcen sollten durch Substantive dargestellt und in einer Hierarchie aufrechterhalten werden. 2. HTTP -Methoden sollten ihrer Semantik entsprechen, z. B. Get wird verwendet, um Ressourcen zu erhalten. 3. Der Statuscode sollte korrekt verwendet werden, z. B. 404 bedeutet, dass die Ressource nicht vorhanden ist. 4. Die Versionskontrolle kann über URI oder Header implementiert werden. 5. Hateoas startet Client -Operationen durch Links als Antwort.

In PHP wird das Ausnahmebehandlung durch den Versuch, Fang, schließlich und werfen Keywords erreicht. 1) Der Try -Block umgibt den Code, der Ausnahmen auslösen kann. 2) Der Catch -Block behandelt Ausnahmen; 3) Block stellt schließlich sicher, dass der Code immer ausgeführt wird. 4) Wurf wird verwendet, um Ausnahmen manuell zu werfen. Diese Mechanismen verbessern die Robustheit und Wartbarkeit Ihres Codes.

Die Hauptfunktion anonymer Klassen in PHP besteht darin, einmalige Objekte zu erstellen. 1. Anonyme Klassen ermöglichen es, Klassen ohne Namen direkt im Code zu definieren, was für vorübergehende Anforderungen geeignet ist. 2. Sie können Klassen erben oder Schnittstellen implementieren, um die Flexibilität zu erhöhen. 3. Achten Sie bei der Verwendung auf Leistung und Code -Lesbarkeit und vermeiden Sie es, dieselben anonymen Klassen wiederholt zu definieren.
