Dans le livre original qui a inventé les termes Observateur et Médiateur, Design Patterns, Elements of Reusable Object-Oriented Software, il est dit que le modèle Mediator peut être mis en œuvre en utilisant le modèle Observateur. Cependant, il peut également être implémenté en faisant en sorte que les collègues (à peu près équivalents aux modèles Subjects of the Observer) aient une référence à une classe Mediator ou à une interface Mediator.
Il existe de nombreux cas où vous souhaitez utiliser le modèle d'observateur, la clé est que sur l'objet ne doit pas savoir quels autres objets observent son état.
Le médiateur est un peu plus spécifique, il évite que les classes communiquent directement mais à travers un médiateur. Cela aide le principe de responsabilité unique en permettant de décharger la communication à une classe qui gère simplement cela.
Un exemple classique de médiateur est dans une interface graphique, où l'approche naïve pourrait conduire à du code sur un événement de clic de bouton disant "si le panneau Foo est désactivé et le panneau Bar a une étiquette disant" Veuillez entrer la date "alors n'appelez pas le serveur, sinon allez-y ", où avec le modèle Mediator, il pourrait dire" Je suis juste un bouton et je n'ai rien à faire avec le panneau Foo et l'étiquette sur le panneau Bar, donc je vais simplement demander à mon médiateur d'appeler le serveur est OK en ce moment. "
Ou, s'il est mis en œuvre en utilisant le modèle d'observateur, le bouton dirait "Hé, observateurs (qui comprendraient le médiateur), mon état a changé (quelqu'un m'a cliqué). Faites quelque chose si vous vous en souciez". Dans mon exemple, cela a probablement moins de sens, mais parfois ce serait le cas, et la différence entre l'Observateur et le Médiateur serait davantage une intention plutôt qu'une différence dans le code lui-même.