Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
FORUMS JAVA FAQs TUTORIELS JAVASEARCH SOURCES LIVRES OUTILS, EDI & API ECLIPSE NETBEANS BLOG DISCUSSIONS TV
Trucs et astuces
Validité des paramètres
Documenter votre code
Assertions
Tests unitaires
Design patterns - GOF
Adaptateur
Composite
Décorateur
etat
Façade
Kit
Monteur
Pont
Proxy
Singleton
Design patterns - Avalon
IOC - Inversion Of Control
SOC - Seperation Of Concerns
COP - Component Orientated Programming
SOP - Service Orientated Programming
Autres articles
Cahier
XML Sax en java
Fractal
AspectJ

Voir aussi
Patterns du GRASP
héritage avec des EJB Entiy CMP

Ressouces java
Informations
Cours
Livres
FAQ
Outils
EDI
Ressources uml
Cours
Livres
Forums d'entraide
Géneral Java
J2EE
JBuilder
Outils EDI
Méthodes/UML/Mérise


L'adaptateur
24 Avril 2003
Version 1.0
Par Sébastien MERIC
Remerciements : Stefan Bertholon

Synonymes

Encapsulateur, Empaquetage

Synopsis

Pour des raisons de conformité à une norme, pour ne pas dépendre d'une implémentation, pour permettre l'évolutivité de votre projet, il arrive que vous ayez besoin de vous reposer sur une interface ou une API qui n'est pas précisement celle qui vous est fournie. Ce design pattern vous propose de pallier cette problématique.

Exploration

J'ai récemment rencontré le problème d'un manque de conformité d'un outil par rapport à sa fonction et aux standards proposés par Sun en matière d'utilisation en java. Ma problèmatique était d'envoyer un mail, l'outil : l'API Java de Lotus qui pour la version que j'utilisais n'était pas conforme à Javamail. Pourquoi aurais-je fais le choix d'empaqueter les outils dans un pattern pour le rendre conforme aux normes Java ? Plusieurs raisons s'offrent à nous :

  • Le besoin de ne pas dépendre de Lotus pour envoyer les mails puisqu'on ignore de quoi demain pourrait être fait
  • La probabilité très forte que l'API futur de Lotus se conforme aux normes donc un souci de compatibilité ascendante
  • Et surtout, la connaissance acquise autour de l'API Sun plutôt qu'autour de celle d'IBM. En effet, Javamail est standard et connu par de nombreux développeurs, il dispose de nombreuses documentations et bénéficie d'une importante communauté d'entraide au developpement.

Pour diverses raisons, il peut donc être de bonne augure de se fixer le développement d'un adaptateur entre les classes clientes et une API qui nous est fournie. Une seule bonne raison pour ne pas le faire, mais elle est de taille et mérite réflexion, sera le temps passé à la réalisation de cet adaptateur (et quand on parle de Javamail, ceci peut devenir rédhibitoire).

Structure

La structure est quasiment triviale, il suffit en fait de fournir une classe intermédiaire qui soit conforme à vos attentes. Celle-ci délègue toutes les requêtes qui lui sont faites à l'API fournie. L'API peut donc ne pas être conforme à vos attentes. Il est, comme toujours, préférable de s'appuyer sur la notion d'interface pour ne pas dépendre de l'implémentation même sous cette forme, le diagramme va dans ce sens.

Diagramme de l'adaptateur

Implémentation

Je vais vous fournir une API bidon (on reprend l'exemple du Logger) ou tout est en français et pour laquelle vous voulez être conforme à l'outil log4j un peu plus standard. Je ne reprend qu'une seule méthode pour la démonstration.

com.developpez.adaptateur.LoggerFrancais

/*
 * LoggerFrancais.java
 *
 * Created on 11 mars 2003, 17:18
 */

package java.uml.adaptateur.com.developpez.adaptateur;

public class LoggerFrancais {

    /** Creates a new instance of LoggerFrancais */
    public LoggerFrancais() {
    }

    /**
     * Log une exception quand elle est levée.
     */
    public void erreur(Exception e) {
        // ici le code pour logger
        throw new RuntimeException("Pas implémentée");
    }

}

com.developpez.adaptateur.LoggerAdaptateur

/*
 * LoggerAdaptateur.java
 *
 * Created on 11 mars 2003, 17:22
 */

package java.uml.adaptateur.com.developpez.adaptateur;

/**
 *
 * @author  smeric
 */
public interface LoggerAdaptateur {
    public void error(Exception e);
}

com.developpez.adaptateur.LoggerAdaptateurImpl

/*
 * LoggerAdaptateurImpl.java
 *
 * Created on 11 mars 2003, 17:26
 */

package java.uml.adaptateur.com.developpez.adaptateur;

/**
 *
 * @author  smeric
 */
public class LoggerAdaptateurImpl implements LoggerAdaptateur {

    /** Creates a new instance of LoggerAdaptateurImpl */
    public LoggerAdaptateurImpl() {
    }

    public void error(Excpetion e) {
        // ici, on se contente d'appeler la méthode du logger non conforme
        // effectuant ce que la méthode error() devrait effectuer.
        getLoggerFrancais.erreur(e);
    }

    private LoggerFrancais getLoggerFrancais() {
        if (null == loggerFrancais) {
            loggerFrancais= new LoggerFrancais();
        }
        return loggerFrancais;
    }

    private LoggerFrancais loggerFrancais; // notre cible

}
Copyright (c) 2003 Sébastien MERIC. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with the Front-Cover Texts being L'adaptateur, and Back-Cover Texts being Ce document à été écrit pour la communauté de développeurs francophones "www.developpez.com". A copy of the license is included in the section entitled "GNU Free Documentation License".
/java/uml/adaptateur  

Responsables bénévoles de la rubrique Java : Christophe Jollivet et Eric Siber - Contacter par EMail :
Vos questions techniques : forum d'entraide Java - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2008 www.developpez.com - Legal informations.