En programmation orientée objet, les programmes sont souvent composés de nombreuses classes . La logique métier et les calculs sont répartis entre ces classes. Cependant, à mesure que l'on ajoute des classes à un programme, notamment lors de la maintenance ou de la refactorisation , la communication entre elles peut se complexifier. Le programme devient alors plus difficile à lire et à maintenir. De plus, toute modification peut s'avérer complexe, car elle risque d'affecter le code de plusieurs autres classes.
Avec le modèle médiateur, la communication entre les objets est encapsulée dans un objet médiateur . Les objets ne communiquent plus directement entre eux, mais par l'intermédiaire du médiateur. Cela réduit les dépendances entre les objets communicants, et donc le couplage .
modèles de conception bien connus qui décrivent comment résoudre les problèmes de conception récurrents pour concevoir des logiciels orientés objet flexibles et réutilisables, c'est-à-dire des objets plus faciles à implémenter, à modifier, à tester et à réutiliser.Problèmes que le modèle de conception médiateur peut résoudre
Source :
- Il convient d'éviter un couplage étroit entre un ensemble d'objets interagissant.
- Il devrait être possible de modifier indépendamment l'interaction entre un ensemble d'objets.
Définir un ensemble d'objets interagissant en accédant et en se mettant à jour directement les uns les autres manque de flexibilité, car cela crée un couplage fort entre les objets et empêche de modifier l'interaction indépendamment des objets eux-mêmes. De plus, cela limite leur réutilisabilité et complique les tests.
Les objets fortement couplés sont difficiles à implémenter, à modifier, à tester et à réutiliser car ils font référence à de nombreux objets différents et les connaissent.
Solutions décrites par le modèle de conception du médiateur
- Définissez un objet distinct (médiateur) qui encapsule l'interaction entre un ensemble d'objets.
- Les objets délèguent leur interaction à un objet médiateur au lieu d'interagir directement entre eux.
Les objets interagissent indirectement entre eux par l'intermédiaire d'un objet médiateur qui contrôle et coordonne l'interaction.
Cela rend les objets faiblement couplés . Ils ne font référence qu'à leur objet médiateur et n'ont aucune connaissance explicite l'un de l'autre.
Voir également le diagramme de classes et de séquences UML ci-dessous.
Définition
L'essence du modèle médiateur est de « définir un objet qui encapsule la manière dont un ensemble d'objets interagissent ». Il favorise un couplage faible en empêchant les objets de se référencer explicitement les uns aux autres et permet de faire varier leurs interactions indépendamment. Les classes clientes peuvent utiliser le médiateur pour envoyer des messages à d'autres clients et peuvent recevoir des messages d'autres clients via un événement sur la classe médiateur.
Structure
Diagramme de classes et de séquence UML

Dans le diagramme de classes UML ci-dessus , les classes et ne se référencent pas (et ne se mettent pas à jour) directement. Elles font plutôt référence à l' interface commune de contrôle et de coordination de l'interaction ( ), ce qui les rend indépendantes l'une de l'autre quant à la manière dont l'interaction est mise en œuvre. La classe implémente l'interaction entre et .Colleague1Colleague2Mediatormediate()Mediator1Colleague1Colleague2
Le diagramme de séquence UML illustre les interactions lors de l'exécution. Dans cet exemple, un objet assure la médiation (contrôle et coordonne) de l'interaction entre les objets.Mediator1Colleague1Colleague2
En supposant que l'objet Colleague1souhaite interagir avec Colleague2(pour mettre à jour/synchroniser son état, par exemple), Colleague1il appelle mediate(this)l' Mediator1objet, qui récupère les données modifiées Colleague1et effectue une action2()opération sur celui-ci Colleague2.
Ensuite, Colleague2des appels sont mediate(this)effectués sur l' Mediator1objet, qui récupère les données modifiées Colleague2et effectue une opération action1()sur celui-ci Colleague1.
Diagramme de classes

- Participants
Médiateur - définit l'interface de communication entre les objets Collègues
ConcreteMediator implémente l'interface de médiation et coordonne la communication entre les objets Colleague . Il connaît tous les Colleagues et leurs objectifs en matière d'intercommunication.
Collègue - définit l'interface de communication avec les autres collègues via son médiateur
ConcreteColleague - implémente l'interface Colleague et communique avec les autres Colleagues via son médiateur
Exemple
C#
Le modèle médiateur garantit un couplage faible entre les composants , qui ne s'appellent pas directement, mais passent par un médiateur. Dans l'exemple suivant, le médiateur enregistre tous les composants puis appelle leurs communication à distance . L'utilisation de sockets bruts ne permettrait pas la gestion des rappels des délégués (les personnes abonnées à l'événement MessageReceived de la classe Mediator).
Java
Dans l'exemple suivant, un Mediatorobjet contrôle les valeurs de plusieurs Storageobjets, obligeant le code utilisateur à accéder aux valeurs stockées via le médiateur. Lorsqu'un objet de stockage souhaite émettre un événement indiquant que sa valeur a changé, il retourne également à l'objet médiateur (via la méthode notifyObservers) qui contrôle la liste des observateurs (implémentée à l'aide du modèle observateur ).