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 Adapter
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 Adapter

Description

Le but du pattern Adapter est de convertir l’interface d’une classe existante en l’interface attendue par des clients également existants afin qu’ils puissent travailler ensemble. Il s’agit de conférer à une classe existante une nouvelle interface pour répondre aux besoins de clients.

Exemple

Le serveur Web du système de vente de véhicules crée et gère des documents destinés aux clients. L’interface Document a été définie pour cette gestion. Sa représentation UML est montrée à la figure 3-2.1 ainsi que ses trois méthodes setContenu, dessine et imprime. Une première classe d’implantation de cette interface a été réalisée : la classe DocumentHtml qui implante ces trois méthodes. Des objets clients de cette interface et de cette classe ont été conçus.

Par la suite, l’ajout des documents PDF a posé un problème car ceux-ci sont plus complexes à construire et à gérer que des documents HTML. Un composant du marché a été choisi mais dont l’interface ne correspond à l’interface Document. La figure 3-2.1 montre le composant ComposantPdf dont l’interface introduit plus de méthodes et dont la convention de nommage est de surcroît différente (préfixe pdf).

Le pattern Adapter propose une solution qui consiste à créer la classe DocumentPdf implantant l’interface Document et possédant une association avec ComposantPdf. L’implantation des trois méthodes de l’interface Document consiste à déléguer correctement les appels...

Structure

1. Diagramme de classes

La figure 3-2.2 détaille la structure générique du pattern.

images/figure10-2.png

Figure 3-2.2 - Structure du pattern Adapter

2. Participants

Les participants au pattern sont les suivants :

  • Interface (Document) introduit la signature des méthodes de l’objet.

  • Client (ServeurWeb) interagit avec les objets répondant à Interface.

  • Adaptateur (DocumentPdf) implante les méthodes de Interface en invoquant les méthodes de l’objet adapté.

  • Adapté (ComposantPdf) introduit l’objet dont l’interface doit être adaptée pour correspondre à Interface.

3. Collaborations

Le client invoque la méthode demande de l’adaptateur qui, en conséquence, interagit avec l’objet adapté en appelant la méthode accomplit. Ces collaborations sont illustrées à la figure 3-2.3.

images/rfigure103.PNG

Figure 3-2.3 - Diagramme de séquence du pattern Adapter

Domaines d’application

Le pattern est utilisé dans les cas suivants :

  • Pour intégrer dans un système un objet dont l’interface ne correspond pas à l’interface requise au sein de ce système.

  • Pour fournir des interfaces multiples à un objet lors de sa conception.

Exemple en C#

Nous présentons le code source de l’exemple en C#.

Nous commençons par l’interface Document :

using System; 
 
public interface Document 
{ 
 string contenu { set; } 
 void dessine(); 
 void imprime(); 
} 

La classe DocumentHtml est l’exemple de classe implantant l’interface Document

using System; 
 
public class DocumentHtml : Document 
{ 
 protected string _contenu; 
 
 public string contenu 
 { 
    protected get 
    { 
      return _contenu; 
    } 
    set 
    { 
      _contenu = value; 
    } 
 } 
 
 public void dessine() 
 { 
   Console.WriteLine("Dessine document HTML : " + 
     contenu); 
 } 
 
 public void imprime() 
 { 
   Console.WriteLine("Imprime document HTML : " + 
     contenu); 
 } 
 
} 

La classe ComposantPdf représente le composant existant qui est intégré dans l’application. Sa conception est indépendante de l’application et, en particulier, de l’interface...