Pattern Factory

1. Problème initial

Comment instancier plusieurs objets différents dans une même classe sans connaitre l’implémentation exacte de ces objets ?

2. Solution associée

On crée une classe, la Factory, qui va se charger de crée l’objet qu’il nous faut et de nous le renvoyer.

3. Définition

La fabrique (factory method) est un patron de conception créationnel utilisé en programmation orientée objet. Elle permet d'instancier des objets dont le type est dérivé d'un type abstrait. La classe exacte de l'objet n'est donc pas connue par l'appelant.

Remarque : Les fabriques étant en général uniques dans un programme, on utilise souvent le patron de conception singleton pour les implémenter.

Comment est-il implémenté ?

Partons de la situation de départ représentée par le diagramme de classes suivant.



On a donc ici une classe abstraite Forme dont découle trois classes filles qui ont leurs attributs et leurs spécifications.

On veut créer une classe FormeFactory qui se chargera de créer automatiquement l’une de ces formes pour nous en fonction de ce qu’on lui demandera.

Cela ressemblera donc à cela :



Maintenant voyons le code correspondant à FormeFactory.



Remarque : La méthode creerForme retourne un objet de type Forme car on ne peut savoir à l’avance quel objet l’utilisateur va nous demander de créer. Or comme toutes les classes Cercle, Rectangle, Carre sont des sous-types de Forme on aura aucun mal à les transtyper.