5 TP de C++ #5 Singleton et Prototype

5.1 Introduction

Une fois n'est pas coutume, nous présentons deux patterns dans ce TP : Singleton et Prototype. Le but du premier est de limiter le nombre d'instances d'une classe à un seul élément. Le second étant orienté vers la fabrication d'entités pas clonage d'un prototype.

5.2 Le pattern Singleton

5.2.1 Présentation

Au cours de la modélisation de problèmes réels, il est fréquent de rencontrer des classes dont l'on ne souhaite voir apparaître qu'une seule instance. Le pattern Singleton propose une mise en oeuvre simple et efficace de ce modèle.

5.2.2 Mise en place

Quelle est la méthode qui permet de construire un objet ? son constructeur parbleu ! Aussi, si vous désirez controler le nombre d'instances, il faut empêcher l'utilisateur d'utiliser librement le constructeur en ne le mettant pas public. Le mettrez vous protected ou private ? Tout dépend de la classe. Si celle-ci est destinée à être dérivée, alors, il doit impérativement être protected afin d'être appelable par les constructeurs des classes dérivées. Sinon, vous pouvez toujours le mettre private !

Si vous interdisez l'accès au constructeur, comment l'utilisateur va t'il pouvoir créer son instance ? Et bien, vous mettrez à sa disposition une méthode de classe qui :

  1. Vérifiera si l'instance autorisée est déjà créée ou pas
  2. Créera l'instance en appelant le constructeur pour vous

5.2.3 Codage

Il est très facile de coder ce mécanisme en C++. Je vous demande de travailler un peu dessus, mais la solution est disponible. En outre, vous voyez qu'il est facile de créer un template pour la rendre générique.

5.2.4 Application

Si vous avez utilisé un superviseur au TP précédent, appliquez directement ce pattern pour le construire. Sinon considérez que l'hélicoptère est unique !

5.2.5 Pour aller plus loin

  1. Il est possible d'utiliser un même singleton avec toute une hiérarchie en utilisant un switch dans la méthode de classe chargée de créer l'instance unique. Par exemple, cela permet de changer le type de superviseur d'un système à l'exécution en fonction d'un flag de ligne de commande.
  2. Il est également possible de créer non pas une instance mais un nombre prédéfini !

5.3 Le pattern Prototype

5.3.1 Présentation

Il existe de nombreux patterns de « construction d'objet ». Certains sont basés sur l'utilisation d'une méthode virtuelle de construction, d'autres sur des protocoles. Le pattern prototype est une méthode assez originale :

5.3.2 Mise en place

Il s'agit de créer un objet Prototype pour chaque hiérarchie que vous allez utiliser. Ensuite, dans son constructeur, vous lui passez un pointeur sur l'objet a cloner (d'où le nom prototype). Finalement, la méthode create de l'objet Prototype clone le modèle qui a été placé en modèle dans le constructeur et le tour est joué !

5.3.3 Application

Créez une classe Prototype pour les objets de la hiérarchie de Véhicule.