« Patrons de conception/Fabrique abstraite » : différence entre les versions

Un livre de Wikilivres.
imported>FlaBot
m robot Ajoute: it
(Aucune différence)

Version du 6 février 2006 à 12:16

La Fabrique Abstraite est un motif de conception (design pattern) créationnel utilisé en génie logiciel.

Une fabrique abstraite encapsule un groupe de fabriques particulières ayant une thématique commune. Le code client crée une implémentation concrète de la fabrique abstraite, puis utilise les interfaces génériques pour créer des objets concrets de la thématique. Le client ne se préoccupe pas de savoir quels objets concrets il obtient de chacune de ces fabriques, car il n'utilise que les interfaces génériques de leurs produits. Ce motif de conception sépare les détails d'implémentation d'un ensemble d'objets, de leur usage générique.

Par exemple, une fabrique abstraite implantée par une classe documentCreator fournit une interface pour créer un certain nombre de produits (ex: createLetter() et createResume()). Le système a à disposition des versions concrètes dérivées de la classe documentCreator, par exemple fancyDocumentCreator et modernDocumentCreator, qui possèdent chacune leur propre implémentation de createLetter() et createResume() pour créer des objets comme fancyLetter ou modernResume. Chacun de ces produits dérive d'une simple classe abstraite comme Letter ou Resume, dont le client a connaissance. Le code client obtient une instance de documentCreator et appelle ses méthodes de fabrication. Tous les objets sont ensuites créés par le même documentCreator et ont la même thématique (par exemple, ils seront tous fancy). Le client a simplement besoin de savoir manipuler les classes abstraites Letter et Resume, et non la version particulière obtenue par la fabrique concrète.

Une fabrique est un endroit du code où sont construits des objets. L'emploi de ce motif de conception permet d'isoler la création des objets de leur usage. Ainsi, on peut utiliser de nouveaux types dérivés sans rien changer au code qui utilise l'objet de base.

Avec ce motif de conception, on peut interchanger des classes concrètes sans changer le code qui les utilise, même à l'exécution. Toutefois, ce motif de conception exige un travail supplémentaire lors du développement initial, et apporte une certaine complexité qui n'est pas forcément souhaitable.

Structure

Fichier:Abstractfactory.png