Dies zeigt, dass die Verwendung von Event Collaboration einige Änderungen erleichtert, andere jedoch schwieriger. Es ist nicht einfach, ein faires Bild von den Kompromissen zu bekommen, da wir nicht viel gesehen haben, was wirklich Erfahrung auf der Grundlage eines echten Verständnisses der beiden verschiedenen Stile erfasst. ObserverGateway ist ein weiteres Messaging-Gateway, diesmal zwischen dem Observer (nicht angezeigt) und dem Messagingsystem. Der Beobachter erstellt das Gateway und verwendet dann attach(), um die Verbindung zu starten (was analog zum Aufrufen der Attach(Observer)-Methode im Observer-Muster ist. Das Gateway ist ein ereignisgesteuerter Consumer, daher implementiert es die MessageListener-Schnittstelle, die die onMessage-Methode erfordert. Auf diese Weise verarbeitet das Gateway beim Empfangen einer Aktualisierung die Nachricht, um den neuen Status abruft, und ruft die eigene update(String)-Methode auf, die die entsprechende Nachricht im Observer aufruft. Elemente können viele Beziehungen zu anderen Elementen haben. Daher können Änderungen an einigen Elementen die anderen beeinflussen. Das State-Muster ist eng mit dem Konzept einer Finite-State-Maschine verbunden. Wenn Sie sich also ein Szenario vorstellen, in dem alle Ihre Kundendaten von einer zentralen Kundenverwaltungsanwendung verwaltet werden sollen.

Insbesondere verwaltet sie die Kundenadressen. Sie haben auch ein häufiges Imbiber-Programm, das Menschen belohnt, die glauben, dass es wichtig ist, ihre Single Malt Verkostung Fähigkeiten mit praktischen Mitteln zu halten. Wenn ich die häufige imbiber Website benutze, um eine Spezielle Angebot Flasche Lagavulin zu bestellen, sendet es eine Anfrage an das Kundenmanagementsystem, um meine Lieferadresse während meiner Sitzung mit der Website zu erhalten. Wenn ich während dieser Sitzung meine Adresse aktualisieren möchte, nimmt die häufige Imbiber-Anwendung meine Anfrage entgegen und sendet eine Befehlsnachricht an das Kundenverwaltungssystem, um die Aktualisierung durchzuführen. Mehrere Komponenten arbeiten zusammen, indem sie miteinander kommunizieren, indem Ereignisse gesendet werden, wenn sich ihr interner Status ändert. Das Observer-Muster [GoF] dokumentiert einen Entwurf, durch den ein Objekt seine abhängigen Elemente einer Änderung benachrichtigen kann, während dieses Objekt von seinen abhängigen Elementen entkoppelt bleibt, sodass das Objekt unabhängig davon, wie viele abhängige Objekte es hat, auch gar keine stutzig funktioniert. Seine Teilnehmer sind ein Subjekt – das Objekt, das Änderungen in seinem Zustand ankündigt – und Beobachter, die daran interessiert sind, Benachrichtigungen über Änderungen im Betreff zu erhalten. Wenn sich der Status eines Subjekts ändert, sendet er sich Notify(), dessen Implementierung die Liste der Beobachter kennt und Update() an jeden von ihnen sendet. Einige Beobachter sind vielleicht nicht an dieser Änderung des Staates interessiert, aber diejenigen, die es sind, können herausfinden, was der neue Staat ist, indem sie GetState() an das Subjekt senden. Der Betreff muss auch Attach(Observer)- und Detach(Observer)-Methoden implementieren, die die Beobachter verwenden, um Interessen zu registrieren. Diese beiden Klassen implementieren die Pushmodellversion von Observer. Mit der Benachrichtigungsnachricht, die von SubjectGateway.notify(String) gesendet wird, teilt die Vorhandenmeldung dem Beobachter mit, dass eine Änderung stattgefunden hat, aber es ist der Inhalt der Nachricht, der dem Observer mitteilt, was der neue Status des Betreffs ist.

Der neue Staat wird vom Subjekt zum Beobachter geschoben. Wie wir später sehen werden, gibt es eine andere Möglichkeit, all dies mithilfe des Pull-Modells zu implementieren. Trotz der über 700 Seiten deckt unser Buch nur einen Bruchteil der Muster (und die zu lösenden Probleme) im Integrationsraum ab. Die aktuellen Muster konzentrieren sich auf Messaging, das die Grundlage für die meisten anderen Integrationsmuster bildet. Wir haben begonnen, mehr Muster zu ernten, aber wir erkennen (wieder einmal) wie viel Arbeit die Dokumentation dieser Muster wirklich ist. Bleiben Sie also bitte dran. Unter der Annahme, dass Colleague1 mit Colleague2 interagieren möchte (z. B. um seinen Status zu aktualisieren/synchronisieren), ruft Colleague1 mediate(this) für das Mediator1-Objekt auf, das die geänderten Daten von Colleague1 abruft und eine Aktion2() für Colleague2 ausführt.