Ich bin ein bisschen amüsiert darüber, dass alle Antworten hier versucht haben, den subtilen Unterschied zwischen Observer- und Pub / Sub-Mustern zu erklären, ohne konkrete Beispiele zu nennen. Ich wette, die meisten Leser wissen immer noch nicht, wie sie jeden implementieren sollen, indem sie lesen, dass einer synchron und der andere asynchron ist.
Eine Sache zu beachten ist: Das Ziel dieser Muster ist es, Code zu entkoppeln
Der Beobachter ist ein Entwurfsmuster, bei dem ein Objekt (als Subjekt bezeichnet) eine Liste von Objekten in Abhängigkeit davon (Beobachter) verwaltet und diese automatisch über Statusänderungen informiert.
Beobachtermuster
Dies bedeutet, dass ein observable object
eine Liste hat, in der alle seine observers
(normalerweise funktionalen) Funktionen gespeichert sind. und kann diese Liste durchlaufen und diese Funktionen aufrufen, wenn es sich gut anfühlt.
Einzelheiten finden Sie in diesem Beispiel für ein Beobachtermuster .
Dieses Muster eignet sich gut, wenn Sie auf Datenänderungen an einem Objekt warten und andere Benutzeroberflächenansichten entsprechend aktualisieren möchten.
Die Nachteile sind jedoch Observables, die nur ein Array zum Halten von Beobachtern verwalten
(im Beispiel ist das Array observersList
).
Es wird NICHT unterschieden, wie das Update ausgelöst wird, da es nur eine hat notify function
, die alle in diesem Array gespeicherten Funktionen auslöst.
Wenn wir Beobachter-Handler basierend auf verschiedenen Ereignissen gruppieren möchten. Wir müssen das nur observersList
auf ein Object
ähnliches ändern
var events = {
"event1": [handler1, handler2],
"event2": [handler3]
}
Einzelheiten finden Sie in diesem Pubsub-Beispiel .
und die Leute nennen diese Variation als pub/sub
. So können events
Sie je nach Veröffentlichung verschiedene Funktionen auslösen .