Modèle de conception de méthode dusine

Intention

  • Définissez une interface pour créer un objet, mais laissez les sous-classes décider de la classe à instancier. La méthode Factory permet à une classe de déférer à des sous-classes.
  • Définition dun constructeur « virtuel ».
  • Lopérateur new considéré comme dangereux.

Problème

Un framework doit normaliser le modèle architectural pour une gamme dapplications, mais permettre aux applications individuelles de définir leurs propres objets de domaine et de prévoir leur instanciation.

Discussion

La méthode dusine consiste à créer des objets comme la méthode modèle consiste à implémenter un algorithme. Une superclasse spécifie tous les comportements standard et génériques (en utilisant des «espaces réservés» virtuels purs pour les étapes de création), puis délègue les détails de création aux sous-classes qui sont fournies par le client.

La méthode dusine rend un design plus personnalisable et seulement un peu plus compliqué. Dautres modèles de conception nécessitent de nouvelles classes, alors que la méthode Factory ne nécessite quune nouvelle opération.

Les gens utilisent souvent la méthode dusine comme moyen standard de créer des objets; mais ce nest pas nécessaire si: la classe qui est instanciée jamais les changements, ou linstanciation a lieu dans une opération que les sous-classes peuvent facilement ignorer (comme une opération dinitialisation).

La méthode Factory est similaire à Abstract Factory mais sans les familles daccentuation.

Méthodes dusine sont systématiquement spécifiées par un cadre architectural, puis implémentées par lutilisateur du framework.

Structure

Limplémentation de la méthode dusine discutée dans le Gang of Four (ci-dessous) chevauche largement celui de Abstract Factory. Pour cette raison, la présentation de ce chapitre se concentre sur lapproche qui est devenue populaire depuis.

Une définition de plus en plus populaire de lusine méthode est: une méthode static dune classe qui renvoie un objet du type de cette classe « . Mais contrairement à un constructeur, lobjet réel quil renvoie peut être une instance dune sous-classe. Unlikea constructeur, un un objet existant peut être réutilisé au lieu dun nouvel objet créé. Contrairement à un constructeur, les méthodes dusine peuvent avoir des noms différents et plus descriptifs (par exemple, Color.make_RGB_color(float red, float green, float blue) et Color.make_HSB_color(float hue, float saturation, float brightness)

Le client est totalement découplé des détails dimplémentation des classes dérivées. La création polymorphe est désormais possible.

Exemple

La méthode Factory définit une interface pour créer des objets, mais laisse les sous-classes décider des classes à instancier. Les presses de moulage par injection démontrent ce modèle. Les fabricants de jouets en plastique traitent la poudre de moulage en plastique et injectent le plastique dans des moules de formes désirées. La classe du jouet (voiture, figurine, etc.) est déterminée par le moule.

Liste de contrôle

  1. Si vous avez une hiérarchie dhéritage qui exerce le polymorphisme, envisagez dajouter une capacité de création polymorphe en définissant une méthode de fabrique static dans la classe de base.
  2. Concevez les arguments de la méthode de fabrique. Quelles qualités ou caractéristiques sont nécessaires et suffisantes pour identifier la classe dérivée correcte à instancier?
  3. Envisagez de concevoir un « pool dobjets » interne qui permettra aux objets dêtre réutilisés au lieu dêtre créés à partir de zéro.
  4. Envisager créer tous les constructeurs private ou protected.

Règles de base

  • Les classes de fabrique abstraite sont souvent implémentées avec des méthodes dusine, mais elles peuvent être implémentées à laide de Prototype.
  • Les méthodes dusine sont généralement appelées dans les méthodes de modèle.
  • Méthode dusine: création par héritage . Prototype: création par délégation.
  • Souvent, les conceptions commencent à laide de la méthode Factory (moins compliquée, plus personnalisable, les sous-classes prolifèrent) et évoluent vers AbstractFactory, Prototype ou Builder (plus flexible, plus complexe) à mesure que le concepteur découvre où le plus la flexibilité est nécessaire.
  • Le prototype ne nécessite pas de sous-classement, mais il nécessite une opération dinitialisation. La méthode dusine nécessite un sous-classement, mais ne nécessite pas dinitialisation.
  • Lavantage dune méthode dusine est quil peut renvoyer la même instance plusieurs fois, ou peut renvoyer une sous-classe plutôt quun objet de ce type exact.
  • Certains défenseurs de la méthode dusine le recommandent pour la conception du langage (ou à défaut, pour une question de style ) absolument tous les constructeurs doivent être privés ou protégés. Ce nest pas une seule affaire de savoir si une classe fabrique un nouvel objet ou en recycle un ancien.
  • Lopérateur new considéré comme dangereux. Il y a une différence entre demander un objet et en créer un. Lopérateur new crée toujours un objet et ne parvient pas à encapsuler la création dobjet.Une méthode dusine applique cette encapsulation et permet de demander un objet sans lien inextricable avec lacte de création.

Soutenez notre site Web gratuit et possédez leBook!

  • 22 modèles de conception et 8 principes expliqués en profondeur
  • 406 pages bien structurées, faciles à lire et sans jargon
  • 228 illustrations et diagrammes clairs et utiles
  • Une archive avec des exemples de code en 4 langues
  • Tous les appareils pris en charge: formats EPUB / MOBI / PDF

En savoir plus …

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *