<aside> 📘

DĂ©finit une interface pour crĂ©er des objets dans une classe mĂšre, mais dĂ©lĂšgue le choix des types d’objets Ă  crĂ©er aux sous-classes.

</aside>

😠 Problùme

La premiÚre version de votre application ne propose que le transport par camion, la majeure partie de votre code est donc située dans la classe Camion.

La majeure partie est actuellement couplĂ©e Ă  la classe Camion. Pour pouvoir ajouter des Bateaux dans l’application, il faudrait revoir la base du code.

L’ajout d’une nouvelle classe au programme ne s’avĂšre pas si simple que cela si le reste du code est dĂ©jĂ  couplĂ© aux classes existantes.

L’ajout d’une nouvelle classe au programme ne s’avĂšre pas si simple que cela si le reste du code est dĂ©jĂ  couplĂ© aux classes existantes.

😀Solution

Remplacer les appels directs au constructeur de l’objet (Ă  l’aide de l’opĂ©rateur new) en appelant une mĂ©thode fabrique spĂ©ciale.

Les sous-classes peuvent modifier les classes des objets retournés par la méthode fabrique.

Les sous-classes peuvent modifier les classes des objets retournés par la méthode fabrique.

Maintenant, vous pouvez redéfinir la méthode fabrique dans la sous-classe et changer la classe des produits créés par la méthode.

<aside> ⚠

Les sous-classes peuvent retourner des produits diffĂ©rents seulement si les produits ont une classe de base ou une interface commune. De plus, cette interface doit ĂȘtre le type retournĂ© par la mĂ©thode fabrique de la classe de base.

</aside>

Par exemple, les classes Camion et Bateau doivent toutes les deux implĂ©menter l’interface Transport, qui dĂ©clare une mĂ©thode livrer.

Les produits doivent tous implĂ©menter la mĂȘme interface.

Les produits doivent tous implĂ©menter la mĂȘme interface.

La méthode fabrique de la classe LogistiqueRoute retourne des camions, alors que celle de la classe LogistiqueMer retourne des bateaux.

Tant que les classes produit implémentent une interface commune, vous pouvez passer leurs objets au code client sans tout faire planter.

Tant que les classes produit implémentent une interface commune, vous pouvez passer leurs objets au code client sans tout faire planter.

Le code qui appelle la méthode fabrique (souvent appelé le code client) considÚre tous les produits concrets retournés par les sous-classes comme des Transports abstraits. Le client sait uniquement que tous les objets transportés sont censés avoir une méthode livrer .

Structure

image.png

  1. L’interface est dĂ©clarĂ©e par le Produit et est commune Ă  tous les objets qui peuvent ĂȘtre conçus par le crĂ©ateur et ses sous-classes.
  2. Les Produits Concrets sont diffĂ©rentes implĂ©mentations de l’interface produit.
  3. La mĂ©thode fabrique est dĂ©clarĂ©e par la classe CrĂ©ateur et retourne les nouveaux produits. Il est important que son type de retour concorde avec l’interface produit.