Modèle de méthode de fabrique
Définissez une méthode de fabrique dans une classe de base et laissez les sous-classes décider quel produit créer.
Modèle de méthode de fabrique est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.
L’intention de la méthode fabrique
La méthode fabrique définit une interface pour créer un objet, tout en laissant aux sous-classes le choix de la classe à instancier. Elle découple la logique de création du code client.
Le problème sans la méthode fabrique
Sans fabrique, le code client est rempli d’appels à new ConcreteClass(). Ajouter une nouvelle variante impose de modifier chaque point d’appel — ce qui viole le principe ouvert/fermé.
// Client knows too much:
Shape shape;
if (type.equals("circle")) shape = new Circle(r);
else if (type.equals("rect")) shape = new Rectangle(w, h);
// Every new shape requires editing this code.La classe créatrice abstraite
Définissez une classe créatrice abstraite avec une méthode fabrique createProduct(). Les sous-classes la redéfinissent pour renvoyer des types de produits spécifiques.
public abstract class Dialog {
public void render() {
Button btn = createButton(); // factory method
btn.onClick();
}
protected abstract Button createButton();
}Créateurs concrets
Chaque sous-classe redéfinit la méthode fabrique pour renvoyer le produit approprié, sans modifier l’algorithme environnant de la classe de base.
public class WindowsDialog extends Dialog {
@Override
protected Button createButton() { return new WindowsButton(); }
}
public class WebDialog extends Dialog {
@Override
protected Button createButton() { return new HtmlButton(); }
}L’interface du produit
Tous les produits concrets implémentent une interface commune afin que le créateur puisse les manipuler de manière générique.
public interface Button {
void onClick();
void render();
}
public class WindowsButton implements Button {
public void onClick() { System.out.println("Windows click"); }
public void render() { System.out.println("Render Windows button"); }
}Méthodes de fabrique statiques et modèle de méthode fabrique
Une méthode de fabrique statique (par exemple, LocalDate.of()) est une convention de nommage, et non le modèle GoF. Le modèle GoF utilise l’héritage, tandis que les fabriques statiques utilisent des méthodes statiques dans une seule classe.
// Static factory (NOT the GoF pattern)
LocalDate d = LocalDate.of(2024, 6, 15);
// GoF Factory Method uses a class hierarchyMéthode fabrique paramétrée
Transmettez un paramètre à la méthode fabrique pour choisir parmi plusieurs produits, sans exiger une sous-classe par produit.
public class ShapeFactory {
public static Shape create(String type, double... dims) {
return switch (type) {
case "circle" -> new Circle(dims[0]);
case "rectangle" -> new Rectangle(dims[0], dims[1]);
default -> throw new IllegalArgumentException("Unknown: " + type);
};
}
}Méthode fabrique avec des types génériques
Utilisez les types génériques pour rendre la méthode fabrique sûre du point de vue des types et réutilisable avec différentes familles de produits.
public abstract class Repository<T, ID> {
public abstract T findById(ID id);
protected abstract T createEmpty(); // factory method
}Enregistrer des fabriques dans une map
Une fabrique fondée sur un registre stocke une map de chaînes de types vers des lambdas Supplier, ce qui évite les chaînes if-else et rend l’enregistrement dynamique.
Map<String, Supplier<Notification>> registry = new HashMap<>();
registry.put("email", EmailNotification::new);
registry.put("sms", SmsNotification::new);
Notification n = registry.getOrDefault(type, DefaultNotification::new).get();Méthode fabrique et fabrique abstraite
La méthode fabrique crée un type de produit au moyen de l’héritage. La fabrique abstraite crée des familles de produits associés au moyen de la composition. Utilisez la méthode fabrique lorsqu’un seul produit varie, et la fabrique abstraite lorsqu’une suite entière varie ensemble.
Exemple concret : fabrique de journaux
LoggerFactory.getLogger(Class) de SLF4J est une fabrique statique qui renvoie l’implémentation de journalisation appropriée (Logback, Log4j, JUL), sans que l’appelant sache laquelle est utilisée.
Logger log = LoggerFactory.getLogger(MyService.class);
log.info("Service started");Vérification rapide
Quelle est la caractéristique essentielle du modèle de méthode fabrique ?
Récapitulatif
La méthode fabrique découple la création des objets du code client en plaçant la décision d’instanciation dans des méthodes redéfinissables des sous-classes. Utilisez-la lorsqu’une classe ne peut pas prévoir quels objets elle devra créer.
Questions Fréquemment Posées
La leçon « Modèle de méthode de fabrique » est-elle gratuite ?
Oui — le texte complet de « Modèle de méthode de fabrique » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Modèle de méthode de fabrique » ?
Définissez une méthode de fabrique dans une classe de base et laissez les sous-classes décider quel produit créer. Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Java Academy ?
Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Modèle de méthode de fabrique » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?
Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Singleton : implémentations sûres vis-à-vis des threads
- Modèle de méthode de fabrique
- Fabrique abstraite pour des familles de produits
- Modèle Builder avec API fluide