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


Le kit
12 Avril 2003
Version 1.0
Par Sébastien MERIC
Remerciements : Stefan Bertholon

Synonymes

Fabrique abstraite, usine abstraite

Synopsis

Construire son application, construire l'architecture de base applicative est l'un des premiers rôles de votre programme : un point d'entrée (fonction mail en C, méthode static main en C++ et en java, etc.) qui va construire l'application, pourtant l'architecture peut être différente d'un appel à l'autre. Un bon exemple pour les adeptes de java et pour ceux qui font du SWING (interface graphique fenêtrée), c'est de choisir la couche de peinture à utiliser (windows like, motif like ou metal le spécial java). Il nous faut, dans ce cadre, être capable de construire la quasi-même arborescence mais avec des implémentations différentes. C'est ce que se propose de résoudre le kit.

Notre problématique est donc de permettre à un client de choisir un style (pas nécessairement graphique et l'exemple sera non graphique) puis de commencer à fabriquer son architecture objet à l'aide d'une interface unique. La solution consiste donc à utiliser des interfaces, et ce à tous les niveaux. D'une part, au niveau des objets faisant réellement l'objet de manipulation (ici les objets graphiques comme une fenêtre, un arbre, un tableau) et aussi au niveau d'une usine à fournir les objets en question.

Structure

Le besoin, cette fois, est de bien définir les interfaces, fabrication et utilisation, pour permettre d'utiliser diverses implémentations du même composant puis d'implémenter ce composant dans au moins l'une de ses versions (attendu que les autres viendront bien entendu).

Diagramme du kit

Implémentation

Pour l'exemple implémenté, je ne fournirais qu'une seule implémentation d'un composant, le reste allant de soi. Un exemple très connu de kit pour les utilisateurs de java est le processus de création d'instance de classes du JDBC. Nous allons faire pour l'exemple un tout petit driver de persistance. Il ne disposera que d'une seule classe d'utilisation pour que le code ne soit pas trop important et ne sera capable que de lire un enregistrement ou d'en insérer un nouveau. Enfin, j'implémenterais partiellement une instance du composant pour fichier csv et une autre (toujours partielle) pour fichier xml.

com.developpez.kit.KitSerialisation

/*
 * KitSerialisation.java
 *
 * Created on 14 mars 2003, 16:35
 */

package com.developpez.kit;

/**
 *
 * @author  smeric
 */
public interface KitSerialisation {
    public Serialisation getSerialisationInstance();
    // ici il faudrait ajouter des get pour tous les objets que l'on pourrait
    // avoir besoin de construire

    // ex :
    /*public Enregistrement getEnregistrmentInstance(); */
    /*public Champ getChampInstance(); */

    // et du coup définir les interfaces Enregistrement et Champs ainsi que
    // leurs différentes implémentations
}

com.developpez.kit.Serialisation

/*
 * KitSerialisation.java
 *
 * Created on 14 mars 2003, 16:22
 */

package com.developpez.kit;

/**
 *
 * @author  smeric
 */
public interface Serialisation {
    /** Récupère la valeur du champs numéro <i>index</i>.<p>
     * La valeur est récupérée sous forme de chaîne de caractères.
     * @param index le numéro d'ordre du champs à récupérer
     * @throws SerialisationException si l'index est trop grand ou si une
     * erreur d'entrée sortie se produit.
     * @return  la valeur si elle est trouvée sous forme de chaîne de 
     * caractères.
     */
    public String get(int index) throws SerialisationException;
    /** Insert un nouvel enregistrement dans le fichier.
     * @param values un tableau des valeurs à insérer.
     * @throws SerialisationException  si une erreur d'entrée sortie se produit.
     */
    public void insert(String[] values) throws SerialisationException;
}

com.developpez.kit.SerialisationException

/*
 * SerialisationException.java
 *
 * Created on 14 mars 2003, 16:32
 */

package com.developpez.kit;

/**
 *
 * @author  smeric
 */
public class SerialisationException extends java.lang.RuntimeException {

    /**
     * Creates a new instance of <code>SerialisationException</code> without detail message.
     */
    public SerialisationException() {
    }


    /**
     * Constructs an instance of <code>SerialisationException</code> with the specified detail message.
     * @param msg the detail message.
     */
    public SerialisationException(String msg) {
        super(msg);
    }
}

com.developpez.kit.KitSerialisationCsv

/*
 * KitSerialisationCsv.java
 *
 * Created on 14 mars 2003, 16:41
 */

package com.developpez.kit;

/**
 *
 * @author  smeric
 */
public class KitSerialisationCsv implements KitSerialisation {

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

    public Serialisation getSerialisationInstance() {
        return new SerialisatoinCsv();
    }

}

com.developpez.kit.KitSerialisationXml

/*
 * KitSerialisationXml.java
 *
 * Created on 14 mars 2003, 17:10
 */

package com.developpez.kit;

/**
 *
 * @author  smeric
 */
public class KitSerialisationXml implements KitSerialisation {

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

    public Serialisation getSerialisationInstance() {
        return new SerialisationXml();
    }

}

com.developpez.kit.SerialisationCsv

/*
 * SerialisationCsv.java
 *
 * Created on 14 mars 2003, 17:07
 */

package com.developpez.kit;

/**
 *
 * @author  smeric
 */
public class SerialisationCsv implements Serialisation {

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

    /** Récupère la valeur du champs numéro <i>index</i>.<p>
     * La valeur est récupérée sous forme de chaîne de caractères.
     * @param index le numéro d'ordre du champs à récupérer
     * @throws SerialisationException si l'index est trop grand ou si une
     * erreur d'entrée sortie se produit.
     * @return  la valeur si elle est trouvée sous forme de chaîne de
     * caractères.
     */
    public String get(int index) throws SerialisationException {
        throw new SerialisationException("A implémenter");
    }

    /** Insert un nouvel enregistrement dans le fichier.
     * @param values un tableau des valeurs à insérer.
     * @throws SerialisationException  si une erreur d'entrée sortie se produit.
     */
    public void insert(String[] values) throws SerialisationException {
        throw new SerialisationException("A implémenter");
    }

}

com.developpez.kit.SerialisationXml

/*
 * SerialisationXml.java
 *
 * Created on 14 mars 2003, 17:07
 */

package com.developpez.kit;

/**
 *
 * @author  smeric
 */
public class SerialisationXml implements Serialisation {

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

    /** Récupère la valeur du champs numéro <i>index</i>.<p>
     * La valeur est récupérée sous forme de chaîne de caractères.
     * @param index le numéro d'ordre du champs à récupérer
     * @throws SerialisationException si l'index est trop grand ou si une
     * erreur d'entrée sortie se produit.
     * @return  la valeur si elle est trouvée sous forme de chaîne de
     * caractères.
     */
    public String get(int index) throws SerialisationException {
        throw new SerialisationException("A implémenter");
    }

    /** Insert un nouvel enregistrement dans le fichier.
     * @param values un tableau des valeurs à insérer.
     * @throws SerialisationException  si une erreur d'entrée sortie se produit.
     */
    public void insert(String[] values) throws SerialisationException {
        throw new SerialisationException("A implémenter");
    }

}
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 Le kit, 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/kit  

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.