Als ich das letzte Mal den Beobachtermodus studiert habe, hieß es in vielen Artikeln, dass er auch „Subscribe/Publish“ (Veröffentlichungs-/Abonnementmodus) genannt wird. Im Buch „Javascript Design Patterns“ gibt es jedoch immer noch einige Unterschiede zwischen diesen beiden Mustern. Die Originalwörter im Buch lauten wie folgt:
1. Der Beobachtermodus erfordert, dass Beobachter, die Themenbenachrichtigungen erhalten möchten, Inhaltsänderungsereignisse abonnieren müssen.
2. Der Abonnement-/Veröffentlichungsmodus verwendet einen Themen-/Ereigniskanal, der zwischen Abonnenten und Herausgebern besteht. Das Ereignissystem ermöglicht es Code, anwendungsspezifische Ereignisse zu definieren, denen benutzerdefinierte Parameter übergeben werden können, die von Abonnenten benötigte Werte enthalten. Sein Zweck besteht darin, Abhängigkeiten zwischen Abonnenten und Herausgebern zu vermeiden.
Der Unterschied zum Observer-Muster besteht darin, dass jeder Abonnent die entsprechenden Ereignishandler ausführen kann, um sich zu registrieren und Benachrichtigungen vom Herausgeber zu erhalten.
Okay, ich weiß es nicht. Das Folgende ist mein Verständnis:
1. Im Beobachtermuster ist das Zielobjekt für die Aufrechterhaltung des Beobachters verantwortlich. Beim Publish/Subscribe-Modell kümmert sich der Herausgeber nicht um die Abonnenten und ist nur für das Verwerfen der Nachrichten verantwortlich.
2. Im Beobachtermuster muss der Beobachter eine Schnittstelle bereitstellen und diese Schnittstelle dann aufrufen, wenn sich das Zielobjekt ändert, um seinen eigenen Zustand mit dem Zielzustand konsistent zu halten. Das heißt, alle Beobachter müssen über eine einheitliche Schnittstelle verfügen (z. B. die oben beschriebene Aktualisierungsmethode, jede Methode muss diesen Namen tragen). Im Publish/Subscribe-Modell ist das Auslösen von Abonnentenereignissen nicht auf eine solche Schnittstelle angewiesen, sondern wird vom Abonnenten durch Abhören einer bestimmten Nachricht ausgelöst (diese Nachricht enthält im Allgemeinen den Namen und die vom Abonnenten benötigten Parameter). Es versteht sich, dass der Abonnent nicht den Herausgeber, sondern den Nachrichtenpool überwacht. Solange sich im Nachrichtenpool eine Nachricht befindet, die ihn interessiert, wird ein Ereignis ausgelöst, unabhängig davon, wer die Nachricht veröffentlicht hat. Herausgeber und Abonnenten sind entkoppelt.
Das Folgende ist die Implementierung des Publish/Subscribe-Modus in js. Kopieren Sie es, fügen Sie es in die Konsole ein und probieren Sie es aus: