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