Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Les 22 & 23 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Design Patterns en C#
  3. Le pattern Prototype
Extrait - Design Patterns en C# Les 23 modèles de conception : descriptions et solutions illustrées en UML 2 et C# [3e édition]
Extraits du livre
Design Patterns en C# Les 23 modèles de conception : descriptions et solutions illustrées en UML 2 et C# [3e édition]
1 avis
Revenir à la page d'achat du livre

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.

images/figure7-2.png

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 implantent 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 C#

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 MemberwiseClone fournie par C#.

La méthode MemberwiseClone de C# nous évite d’écrire un code qui recopie chaque attribut par une instruction spécifique. Par conséquent, la méthode duplique peut être introduite de façon concrète dans la classe abstraite Document.

using System; 
 
public abstract class Document 
{ 
 protected string contenu = ""; 
 
 public Document duplique() 
 { 
   Document resultat; 
   resultat = (Document)this.MemberwiseClone(); 
   return resultat; 
 } 
 
 public void remplit(string informations) 
 { 
   contenu = informations; 
 } 
 
 public abstract void imprime(); 
 public abstract void affiche(); 
} 
 
 
using System; 
 
public class BonDeCommande : Document 
{ 
 public override void affiche() 
 { 
   Console.WriteLine("Affiche...