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