I. Synonymes

Fabrique abstraite, usine abstraite.

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

Image non disponible

III. Implémentation

Pour l'exemple implémenté, je ne fournirai 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émenterai partiellement une instance du composant pour fichier CSV et une autre (toujours partielle) pour fichier XML.

com.developpez.kit.KitSerialisation
Sélectionnez
/*
 * 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
Sélectionnez
/*
 * KitSerialisation.java
 *
 * Created on 14 mars 2003, 16:22
 */

package com.developpez.kit;

/**
 *
 * @author  smeric
 */
public interface Serialisation {
    /** Récupère la valeur du champ 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 champ à 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;
    /** Insère 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
Sélectionnez
/*
 * 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
Sélectionnez
/*
 * 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
Sélectionnez
/*
 * 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
Sélectionnez
/*
 * 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 champ 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 champ à 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");
    }

    /** Insère 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
Sélectionnez
/*
 * 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 champ 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 champ à 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");
    }

    /** Insère 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");
    }

}