<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>
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.
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.
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.
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.
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 .
