Prototype, Pourquoi utiliser ce patron de conception ?

Posté le octobre 22, 2016 Par upidmin

Dans ce tutoriel, nous appendrons pourquoi utiliser Prototype.

Nous le définirons puis l’analyserons au travers d’un exemple pratique.

Pré-requis : Avoir vu Matrix

prototype-agent-smith-replicas

Définition :

Prototype : Patron de conception utilisé lorsque la création d’instance est complexe ou consommatrice de temps. Plutôt que de créer plusieurs instances d’une même classe, on duplique la première en la modifiant de manière appropriée.

Exemple pratique :

On souhaite créer une armée d’agent Smith. Chacun des agents est identifié par un numéro.
Deux choix s’offre à nous : Créer chaque agent un par un ou en créer un et le dupliquer.

Création des agents un par un

plans_montage

Le code source ci-dessous nous permet de créer une armée d’agents Smith un par un.

Création par clonage

cloning_machine

Le code source suivant crée une armée d’agent Smith par clonage.

Félicitations, le tutoriel se termine, vous savez à présent pourquoi et comment utiliser ce patron de conception.

2 thoughts on “Prototype, Pourquoi utiliser ce patron de conception ?” ?

    li class="comment even thread-even depth-1 parent" id="comment-1">

    Intéressant. Attention, les 2 exemples sont inversés : clonage en 1er et instanciations en 2nd.

    Je ne l’ai pas fait tourner pour voir les temps d’exécutions. Est-ce que deepcopy est plus rapide que la création d’une instance ?


      li class="comment byuser comment-author-upidmin bypostauthor odd alt depth-2" id="comment-2">

      Merci pour ton observation.

      L’exemple pratique a été modifié pour faciliter la compréhension de Prototype.

      Dans cette exemple, la réutilisation de l’instance déjà créée s’avère plus rapide que deepcopy.
      Cependant, il y a une différence majeure.

      Avec deepcopy :
      Chaque agent créé est stocké en mémoire à une adresse unique.
      ex : Anderson => 19878999, Lopez => 19878977
      La modification du nom d’un agent affectera seulement l’agent concerné.
      ex : Anderson -> Jenkins, Jenkins => 19878999, Lopez => 19878977

      Réutilisation d’instance :
      Chaque agent créé avec l’agent original pointe vers un espace mémoire commun.
      La modification du nom d’un agent affectera les autres agents.


Laisser un commentaire