Im folgenden Beispiel wird das Muster des Beobachterentwurfs verwendet, um ein Informationssystem zur Gepäckausgabe am Flughafen zu implementieren. Eine BaggageInfo-Klasse bietet Informationen über ankommende Flüge und die Karussells, in denen Gepäck von jedem Flug abgeholt werden kann. Sie wird im folgenden Beispiel gezeigt. Das Observer-Muster behebt die folgenden Probleme:[2] Konkrete Abonnenten führen einige Aktionen als Reaktion auf Benachrichtigungen des Herausgebers aus. Alle diese Klassen müssen dieselbe Schnittstelle implementieren, damit der Herausgeber nicht an konkrete Klassen gekoppelt ist. Wenn nun ein wichtiges Ereignis mit dem Herausgeber auftritt, geht es über seine Abonnenten und ruft die spezifische Benachrichtigungsmethode für ihre Objekte auf. Ein Anbieter oder Betreff, das Objekt, das Benachrichtigungen an Beobachter sendet. Ein Anbieter ist eine Klasse oder Struktur, die die IObservable-Schnittstelle implementiert. Der Anbieter muss eine einzige Methode implementieren, IObservable. Abonnieren, das von Beobachtern aufgerufen wird, die Benachrichtigungen vom Anbieter erhalten möchten. Neben der Implementierung des Observer-Entwurfsmusters können Sie auch Bibliotheken erkunden, die mit den Schnittstellen IObservable und IObserver erstellt werden. Reactive Extensions for .NET (Rx) bestehen beispielsweise aus einer Reihe von Erweiterungsmethoden und LINQ-Standardsequenzoperatoren zur Unterstützung asynchroner Programmierung. Aber es gibt noch eine andere Option.

Nach Erhalt einer Benachrichtigung kann der Teilnehmer alle Daten direkt aus der Benachrichtigung abrufen. In diesem Fall muss sich der Herausgeber über die Update-Methode übergeben. Die weniger flexible Option besteht darin, einen Herausgeber dauerhaft über den Konstruktor mit dem Abonnenten zu verknüpfen. Der Unterschied zwischen Mediator und Observer ist oft schwer zu fassen. In den meisten Fällen können Sie eines dieser Muster implementieren. aber manchmal können Sie beides gleichzeitig anwenden. Mal sehen, wie wir das tun können. Publisher benachrichtigt Abonnenten, indem die spezifische Benachrichtigungsmethode für ihre Objekte aufgerufen wird. In der Regel wird das Beobachtermuster so implementiert, dass das “beobachtete Subjekt” Teil des Objekts ist, für das Zustandsänderungen beobachtet (und den Beobachtern mitgeteilt werden). Diese Art der Implementierung wird als “eng gekoppelt” betrachtet, was sowohl die Beobachter als auch das Subjekt zwingt, sich gegenseitig zu kennen und Zugang zu ihren internen Teilen zu haben, was zu möglichen Problemen wie Skalierbarkeit, Geschwindigkeit, Nachrichtenwiederherstellung und -wartung (auch Ereignis- oder Benachrichtigungsverlust genannt), mangelnder Flexibilität bei der bedingten Streuung und möglichen Hindernissen für gewünschte Sicherheitsmaßnahmen führt.

In einigen (nicht-polling) Implementierungen des Veröffentlichungs-Abonnement-Musters (auch als Pub-Sub-Muster bezeichnet) wird dies gelöst, indem ein dedizierter “Message-Queue”-Server (und manchmal ein zusätzliches “Message-Handler”-Objekt) als zusätzliche Stufe zwischen dem Beobachteten Beobachter und dem beobachteten Objekt erstellt wird, wodurch die Komponenten entkoppelt werden. In diesen Fällen wird der Nachrichtenwarteschlangenserver von den Beobachtern mit dem Beobachtermuster aufgerufen, wobei bestimmte Nachrichten “abonniert” werden, die nur über die erwartete Nachricht wissen (oder in einigen Fällen nicht), während sie nichts über den Nachrichtenabsender selbst wissen; der Absender kann auch nichts über die Beobachter wissen.