Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Design Patterns en Java
  3. Le pattern Adapter
Extrait - Design Patterns en Java Descriptions et solutions illustrées en UML 2 et Java (5e édition) - Les 23 modèles de conception
Extraits du livre
Design Patterns en Java Descriptions et solutions illustrées en UML 2 et Java (5e édition) - Les 23 modèles de conception 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 au composant...

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/figure103.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 Java

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

Nous commençons par l’interface Document :

public interface Document 
{ 
  void setContenu(String contenu); 
  void dessine(); 
  void imprime(); 
} 

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

public class DocumentHtml implements Document 
{ 
  protected String contenu; 
 
  public void setContenu(String contenu) 
  { 
    this.contenu = contenu; 
  } 
 
  public void dessine() 
  { 
    System.out.println("Dessine document HTML : " + 
      contenu); 
  } 
 
  public void imprime() 
  { 
    System.out.println("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 Document. Cette classe devra être adaptée par la suite.

public class ComposantPdf 
{ ...