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"
);
}
}