Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Du 22 au 24 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Design Patterns en C#
  3. Le pattern Mediator
Extrait - Design Patterns en C# Les 23 modèles de conception : descriptions et solutions illustrées en UML 2 et C# [3e édition]
Extraits du livre
Design Patterns en C# Les 23 modèles de conception : descriptions et solutions illustrées en UML 2 et C# [3e édition]
1 avis
Revenir à la page d'achat du livre

Le pattern Mediator

Description

Le pattern Mediator a pour but de construire un objet dont la vocation est la gestion et le contrôle des interactions dans un ensemble d’objets sans que ses éléments doivent se connaître mutuellement.

Exemple

La conception par objets favorise la distribution du comportement entre les objets du système. Cependant, à l’extrême, cette distribution peut conduire à un très grand nombre de liaisons obligeant pratiquement chaque objet à connaître tous les autres objets du système. Une conception avec une telle quantité de liaisons peut s’avérer être de mauvaise qualité. En effet, la modularité et les possibilités de réutilisation des objets sont alors réduites. Chaque objet ne peut pas travailler sans les autres et le système devient monolithique, perdant toute modularité. De surcroît, pour adapter et modifier le comportement d’une petite partie du système, il devient nécessaire de définir de nombreuses sous-classes.

Les interfaces utilisateur dynamiques sont un bon exemple d’un tel système. Une modification de la valeur d’un contrôle graphique peut conduire à modifier l’aspect d’autres contrôles graphiques comme, par exemple :

  • devenir visible ou masqué ;

  • modifier le nombre de valeurs possibles (pour un menu) ;

  • changer le format des valeurs à saisir.

La première possibilité est donc de lier chaque contrôle aux contrôles dont l’aspect change en fonction de sa valeur. Cette possibilité présente...

Structure

1. Diagramme de classes

La figure 4-6.3 détaille la structure générique du pattern.

images/figure22-3.png

Figure 4-6.3 - Structure du pattern Mediator

2. Participants

Les participants au pattern sont les suivants :

  • Médiateur définit l’interface du médiateur pour les objets Élément.

  • MédiateurConcret (Formulaire) implante la coordination entre les éléments et gère les associations avec les éléments.

  • Élément (Contrôle) est la classe abstraite des éléments qui introduit leurs attributs, associations et méthodes communes.

  • ÉlémentConcret1 et ÉlémentConcret2 (PopupMenu, ZoneSaisie et Bouton) sont les classes concrètes des éléments qui communiquent avec le médiateur au lieu de communiquer avec les autres éléments.

3. Collaborations

Les éléments envoient des messages au médiateur et en reçoivent. Le médiateur implante la collaboration et la coordination entre les éléments.

Domaines d’application

Le pattern est utilisé dans les cas suivants :

  • Un système est formé d’un ensemble d’objets basé sur une communication complexe conduisant à associer de nombreux objets entre eux.

  • Les objets d’un système sont difficiles à réutiliser car ils possèdent de nombreuses associations avec d’autres objets.

  • La modularité d’un système est médiocre, obligeant dans le cas d’une adaptation d’une partie du système à écrire de nombreuses sous-classes.

Exemple en C#

Nous proposons de simuler la saisie d’un formulaire à l’aide d’entrées/sorties classiques en bouclant sur une saisie séquentielle de chaque contrôle jusqu’à ce que le bouton « OK » soit validé (au clavier). Un menu permet de choisir si l’emprunt se fait avec ou sans co-emprunteur.

Le code C# de la classe Controle s’écrit à la suite.

using System; 
 
public abstract class Controle 
{ 
 public string valeur { get; protected set; } 
 public Formulaire directeur { protected get;  set;} 
 public string nom { get; protected set; } 
 
 public Controle(string nom) 
 { 
   this.valeur = ""; 
   this.nom = nom; 
 } 
 
 public abstract void saisie(); 
 
 protected void modifie() 
 { 
   directeur.controleModifie(this); 
 } 
} 

Le code source de la sous-classe ZoneSaisie est le suivant. La méthode saisie est très simple, elle lit la valeur de la zone au clavier.

using System; 
 
public class ZoneSaisie : Controle 
{ 
 public ZoneSaisie(string nom) : base(nom){} 
 
 public override void saisie() 
 { 
   Console.WriteLine("Saisie de : " + nom); 
   valeur = Console.ReadLine(); 
   this.modifie(); 
 } 
} 

La sous-classe Bouton a le code décrit à la suite. La méthode saisie demande à l’utilisateur s’il désire activer le bouton et, en cas de réponse favorable, invoque la méthode...