Le pattern Prototype
Description
Le but du pattern est la création de nouveaux objets par duplication d’objets existants appelés prototypes qui disposent de la capacité de clonage.
Exemple
Lors de l’achat d’un véhicule, un client doit recevoir une liasse définie par un nombre précis de documents tels que le certificat de cession, la demande d’immatriculation ou encore le bon de commande. D’autres types de documents peuvent être ajoutés ou retirés à cette liasse en fonction des besoins de gestion ou des changements de réglementation. Nous introduisons une classe Liasse dont les instances sont des liasses composées des différents documents nécessaires. Pour chaque type de document, nous introduisons une classe correspondante.
Puis nous créons un modèle de liasse qui est une instance particulière de la classe Liasse et qui contient les différents documents nécessaires, documents qui restent vierges. Nous appelons cette liasse, la liasse vierge. Ainsi, nous définissons au niveau des instances le contenu précis de la liasse que doit recevoir un client et non au niveau des classes. L’ajout ou la suppression d’un document dans la liasse vierge n’impose pas de modification dans sa classe.
Une fois cette liasse vierge introduite, nous procédons par clonage pour créer les nouvelles liasses. Chaque nouvelle liasse est créée en dupliquant tous les documents de la liasse vierge.
Cette technique basée sur des objets disposant de la capacité de clonage utilise...
Structure
1. Diagramme de classes
La figure 2-5.2 détaille la structure générique du pattern.
Figure 2-5.2 - Structure du pattern Prototype
2. Participants
Les participants au pattern sont les suivants :
-
Client (Liasse, LiasseClient, LiasseVierge) est une classe composée d’un ensemble d’objets appelés prototypes, instances de la classe abstraite Prototype. La classe Client a besoin de dupliquer ces prototypes sans avoir à connaître ni la structure interne de Prototype ni sa hiérarchie de sous-classes.
-
Prototype (Document) est une classe abstraite d’objets capables de se dupliquer eux-mêmes. Elle introduit la signature de la méthode duplique.
-
PrototypeConcret1 et PrototypeConcret2 (BonDeCommande, DemandeImmatriculation, CertificatCession) sont les sous-classes concrètes de Prototype qui définissent complètement un prototype et en implante la méthode duplique.
3. Collaboration
Le client demande à un ou plusieurs prototypes de se dupliquer eux-mêmes.
Domaines d’utilisation
Le pattern Prototype est utilisé dans les domaines suivants :
-
Un système d’objets doit créer des instances sans connaître la hiérarchie des classes les décrivant.
-
Un système d’objets doit créer des instances de classes chargées dynamiquement.
-
Le système d’objets doit rester simple et ne pas inclure une hiérarchie parallèle de classes de fabrique.
Exemple en Java
Le code source de la classe abstraite Document et de ses sous-classes concrètes est donné à la suite. Pour simplifier, à la différence du diagramme de classes, les méthodes duplique et remplit sont concrètes dans la classe Document. La méthode duplique utilise la méthode clone fournie par Java.
La méthode clone de Java nous évite de devoir recopier manuellement chaque attribut. Par conséquent, la méthode duplique peut être totalement implantée au niveau de la classe abstraite Document.
public abstract class Document implements Cloneable
{
protected String contenu = new String();
public Document duplique()
{
Document resultat;
try
{
resultat = (Document)this.clone();
}
catch (CloneNotSupportedException exception)
{
return null;
}
return resultat;
}
public void remplit(String informations)
{
contenu = informations;
}
public abstract void imprime();
public abstract void affiche();
}
public class BonDeCommande extends Document
{
public...