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

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.
/*
* 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/*
* 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;
}/*
* 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);
}
}/*
* 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();
}
}/*
* 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();
}
}/*
* 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");
}
}/*
* 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");
}
}




