In dem ursprünglichen Buch, das die Begriffe Beobachter und Mediator, Entwurfsmuster und Elemente wiederverwendbarer objektorientierter Software geprägt hat, heißt es, dass das Mediatormuster unter Verwendung des Beobachtermusters implementiert werden kann. Es kann jedoch auch implementiert werden, indem Kollegen (die in etwa den Subjekten des Observer-Musters entsprechen) einen Verweis auf eine Mediator-Klasse oder eine Mediator-Schnittstelle haben.
Es gibt viele Fälle, in denen Sie das Beobachtermuster verwenden möchten. Der Schlüssel ist, dass ein Objekt nicht wissen sollte, welche anderen Objekte seinen Zustand beobachten.
Der Mediator ist etwas spezifischer, er vermeidet, dass die Klassen direkt kommunizieren, sondern über einen Mediator. Dies hilft dem Prinzip der Einzelverantwortung, indem die Kommunikation an eine Klasse ausgelagert werden kann, die sich nur darum kümmert.
Ein klassisches Mediator-Beispiel ist eine grafische Benutzeroberfläche, in der der naive Ansatz dazu führen kann, dass bei einem Schaltflächenklick-Ereignis der Code "Wenn das Foo-Bedienfeld deaktiviert ist und das Balkenbedienfeld die Bezeichnung" Bitte geben Sie das Datum ein "trägt, wird der Server nicht angerufen. Andernfalls weiter ", wo mit dem Mediator-Muster" Ich bin nur ein Knopf und habe keine irdischen Kenntnisse über das Foo-Bedienfeld und das Etikett auf dem Balkenbedienfeld, also frage ich einfach meinen Mediator, ob er den Server anruft ist jetzt in Ordnung. "
Oder, wenn es unter Verwendung des Beobachtermusters implementiert wird, würde die Schaltfläche sagen: "Hey, Beobachter (einschließlich des Vermittlers), mein Zustand hat sich geändert (jemand hat auf mich geklickt). Tun Sie etwas dagegen, wenn es Sie interessiert." In meinem Beispiel ist dies wahrscheinlich weniger sinnvoll, aber manchmal ist dies der Fall, und der Unterschied zwischen Observer und Mediator ist eher beabsichtigt als ein Unterschied im Code selbst.