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