Beispiel: Das Request-Callback-Muster ist nützlich, wenn mehr als ein Vorgang nacheinander ausgeführt werden muss, z. B. wenn eine Anwendung nicht nur Daten aus anderen Quellen lädt, sondern auch einen komplexen Prozess für ihre Analyse anwendet, bei dem die Ausgabe einer Aufgabe die Eingabe der nächsten ist. Geschäftsanforderungen machen unterschiedliche Muster für den Austausch von Nachrichten zwischen teilnehmenden Anwendungen in einem Integrationsszenario erforderlich. Objekte machen auch ein Verhalten verfügbar. Unsere Lampe ändert zum Beispiel ihren Zustand, wenn ich den Schalter drücke. Drücken Sie den Schalter einmal, und die Lampe leuchtet. Drücken Sie den Schalter zweimal, und die Lampe wird wieder ausgeschaltet. Die Lampe, so scheint es, hat einen inneren Zustand, der die Reaktion beeinflusst, die durch das Drücken auf die Taste verursacht wird. Das Verhalten jedes Objekts kann durch Stimulus-Response-Muster beschrieben werden. Jeder Stimulus (jede Clientaktion an der Schnittstelle des Objekts) erzeugt eine bestimmte Antwort, die vom Client über die Schnittstelle beobachtet werden kann.

Diese Reaktion hängt vom Stimulus und natürlich vom inneren Zustand ab. Oder anders betrachtet, kann der innere Zustand durch einen Stimulus verändert werden. Synchrone Vorgänge warten auf eine Antwort, bevor Sie fortfahren. Dadurch werden die Vorgänge in einer seriellen Reihenfolge ausgeführt. Es wird oft gesagt, dass eine Operation blockiert oder auf eine Antwort wartet. Synchrone Vorgänge öffnen einen Kommunikationskanal zwischen den Parteien, stellen die Anforderung und lassen den Kanal geöffnet, bis die Antwort erfolgt. Diese Methode ist wirksam, es sei denn, eine große Anzahl von Kanälen wird für längere Zeit offen gelassen. In diesem Fall können asynchrone Vorgänge besser geeignet sein. Das synchrone Muster ist möglicherweise nicht erforderlich oder angemessen, wenn der Endbenutzer keine sofortige Antwort benötigt.

Möglicherweise müssen Sie einen Verarbeitungsproxy oder eine Fassade verwenden, um die Antwortheader oder die Nutzlast abhängig von den zugrunde liegenden Diensten zu bearbeiten. Vergleichen wir als Nächstes die Ausgabe aus dem Empfang der Anforderung mit der Ausgabe für das Senden der Antwort. Zunächst wurde die Antwort erst nach Eingang der Anfrage (580836 ms) übermittelt. Zweitens unterscheidet sich die Nachrichten-ID für die Antwort von der für die Anforderung. Dies liegt daran, dass die Anforderungs- und Antwortnachrichten unterschiedliche, separate Nachrichten sind. Drittens wurde der Inhalt der Anfrage extrahiert und der Antwort hinzugefügt. Forth, das Antwortziel ist nicht angegeben, da keine Antwort erwartet wird (die Antwort verwendet nicht das Rückgabeadressmuster). Fünftens entspricht die Korrelations-ID der Antwort der Nachrichten-ID der Anforderung (die Antwort verwendet das Korrelationsbezeichnermuster). Das klingt sehr nach einem Automaten, und tatsächlich kann ein Objekt als Finite-State-Automat beschrieben werden. Sein Verhalten kann vollständig durch eine endliche Anzahl von endlichen Sequenzen von Stimulus-Response-Mustern beschrieben werden. Bei Softwareobjekten bestehen die Reize aus Nachrichten, die an das Objekt gesendet werden, und ebenso handelt es sich bei den Antworten um Nachrichten, die an den Client zurückgesendet werden. Während einige objektorientierte Sprachen (z.

B. SmallTalk) diese Nachrichtenmetapher verwenden, haben andere objektorientierte Sprachen, wie Java und C++, das Nachrichtenkonzept in Methodenaufrufe gepackt. Ein Methodenaufruf besteht aus einem Methodennamen, Parametern und einem Rückgabewert. Sowohl Name als auch Parameter stellen die Stimulusnachricht dar, die an das Objekt gesendet wird, während der Rückgabewert die Antwortnachricht enthält. In Sprachen wie C++ und Java werden Methoden nicht nach ihrem Namen, sondern nach ihrer Signatur klassifiziert. Die Methodensignatur besteht aus dem Nachrichtennamen, der Anzahl der Parameter und den Datentypen aller dieser Parameter. Beispielsweise unterscheidet sich der Methodenschalter (boolean) vom Methodenschalter (float). Ein anderer Name für die asynchrone Kommunikation ist die nicht blockierende Kommunikation, da die Anwendung, die eine Anforderung sendet,, nicht auf eine Antwort warten muss, um den Betrieb fortzusetzen.