Factory Method

Catégorie

Patron de création

Problème

Définir une interface pour créer un objet unique, mais laisser les sous-classes décider quelle classe instancier. La Factory Method permet à une classe de reporter l’instanciation aux sous-classes.

Solution

  • Définir une classe de base abstraite avec une méthode de fabrique qui retourne un objet du type de la classe de base
  • Les sous-classes redéfinissent la méthode de fabrique pour retourner des instances de leurs classes concrètes spécifiques
  • Le code client appelle la méthode de fabrique sur la classe de base, sans jamais instancier directement de classes concrètes

Structure

  • Product : L’interface pour les objets que la méthode de fabrique crée
  • ConcreteProduct : Implémentations concrètes de l’interface Product
  • Creator : Classe abstraite déclarant la méthode de fabrique
  • ConcreteCreator : Redéfinit la méthode de fabrique pour retourner un ConcreteProduct

Avantages clés

  • Découplage — Le code client dépend des abstractions, pas des classes concrètes
  • Principe Ouvert/Fermé — De nouveaux types de produits peuvent être ajoutés en créant de nouveaux creators, sans modifier le code existant
  • Logique de création centralisée — Toute la création d’objets se fait à un seul endroit par hiérarchie

Compromis

  • Peut entraîner des hiérarchies de classes profondes à mesure que de nouveaux types de produits sont ajoutés
  • Peut nécessiter du refactoring lorsque de nouveaux types sont introduits dans le code existant
  • Ajoute une surcharge d’abstraction pour des scénarios simples

Quand l’utiliser

  • Une classe ne sait pas à l’avance quelle classe d’objets elle doit créer
  • Une classe souhaite que ses sous-classes spécifient les objets qu’elle crée
  • Vous souhaitez décharger la responsabilité vers l’une des sous-classes d’aide

Exemples