« Patrons de conception/Fabrique abstraite » : différence entre les versions
Contenu supprimé Contenu ajouté
imported>Nipou Aucun résumé des modifications |
imported>Nipou Aucun résumé des modifications |
||
Ligne 1 :
La '''fabrique abstraite''' est un [[
Une fabrique abstraite encapsule un groupe de [[Fabrique (
Un exemple de fabrique abstraite : la classe ''documentCreator'' fournit une interface permettant de créer différents produits (e.g. ''createLetter()'' et ''createResume()''). Le système a à sa disposition des versions concrètes dérivées de la classe ''documentCreator'', comme par exemple ''fancyDocumentCreator'' et ''modernDocumentCreator'', qui possèdent chacune leur propre implémentation de ''createLetter()'' et ''createResume()'' pouvant créer des objets tels que ''fancyLetter'' ou ''modernResume''. Chacun de ces produits dérive d'une [[classe abstraite]] simple comme ''Letter'' ou ''Resume'', connues du client. Le code client obtient une instance de ''documentCreator'' qui correspond à sa demande, puis appelle ses méthodes de fabrication. Tous les objets sont créés par une implémentation de la classe commune ''documentCreator'' et ont donc la même thématique (ici, ils seront tous ''fancy'' ou ''modern''). Le client a seulement besoin de savoir manipuler les classes abstraites ''Letter'' ou ''Resume'', et non chaque version particulière obtenue de la fabrique concrète.
Une '''fabrique''' est un endroit du code où sont construits des objets. Le but de ce
Avec ce
== Utilisation ==
Ligne 16 :
Comme la fabrique retourne uniquement un pointeur abstrait, le code client qui sollicite la fabrique ne connait pas et n'a pas besoin de connaitre le type concret précis de l'objet qui vient d'être créé. Cela signifie en particulier que :
* Le code client n'a aucune connaissance du type concret, et ne nécessite donc aucun fichier header ou déclaration de classe requis par le type concret. Le code client n'interagit qu'avec la classe abstraite. Les objets concrets sont en effet créés par la fabrique, et le code client ne les manipule qu'avec leur interface abstraite.
* L'ajout de nouveaux types concrets dans le code client se fait en spécifiant l'utilisation d'une fabrique différente, modification qui concerne typiquement une seule ligne de code (une nouvelle fabrique crée des objets de types concrets ''différents'', mais renvoie un pointeur du ''même'' type abstrait, évitant ainsi de modifier le code client). C'est beaucoup plus simple que de modifier chaque création de l'objet dans le code client. Si toutes les fabriques sont stockées de manière globale dans un [[singleton (
== Structure ==
Ligne 330 :
== Voir aussi ==
===
* [[Fabrique (
* [[Monteur (
* [[Patron de méthode (
{{Portail informatique}}
|