Mediator

Catégorie

Pattern comportemental

Problème

Réduire le couplage entre les classes qui communiquent entre elles en les faisant communiquer indirectement via un objet médiateur. Sans médiateur, les classes ont des références directes les unes aux autres (couplage en spaghettis).

Solution

  • Créer un objet Mediator qui encapsule la façon dont un ensemble d’objets interagissent
  • Les classes Colleague communiquent entre elles uniquement via le médiateur
  • Le médiateur coordonne l’interaction et connaît tous les collègues

Structure

  • Mediator : Interface pour communiquer avec les objets collègues
  • ConcreteMediator : Implémente le médiateur ; connaît et coordonne les collègues
  • Colleague : Interface pour les objets collègues
  • ConcreteColleague : Communique avec d’autres collègues via le médiateur

Avantages clés

  • Couplage réduit — Les collègues n’ont pas besoin de se connaître
  • Contrôle centralisé — La logique d’interaction est centralisée dans le médiateur
  • Collèges simplifiés — Les collègues sont plus simples car ils ne gèrent pas de relations complexes

Compromis

  • Le médiateur devient complexe — Le médiateur peut devenir un objet god gérant toutes les interactions
  • Indirection — Plus difficile de comprendre le flux de contrôle

Quand l’utiliser

  • Un ensemble d’objets communiquent selon des modèles bien définis mais complexes
  • Réutiliser un objet est difficile car il communique avec beaucoup d’autres
  • Vous voulez personnaliser un motif distribué parmi de nombreuses classes

Exemples