Aller au contenu

Java — Factory Pattern (Création d’objets)

Le Factory Pattern est un design pattern très utilisé pour créer des objets de manière flexible et propre.


1. Idée simple

Le Factory Pattern consiste à :

déléguer la création d’objets à une méthode ou une classe

➡️ au lieu d’utiliser directement new


2. Problème sans factory

Payment p;

if (type.equals("CARD")) {
    p = new CardPayment();
} else if (type.equals("PAYPAL")) {
    p = new PaypalPayment();
}

Problèmes :

  • code dupliqué
  • difficile à maintenir
  • couplage fort

3. Solution avec Factory

class PaymentFactory {
    public static Payment create(String type) {
        if (type.equals("CARD")) {
            return new CardPayment();
        } else if (type.equals("PAYPAL")) {
            return new PaypalPayment();
        }
        throw new IllegalArgumentException("Unknown type");
    }
}

Utilisation

Payment p = PaymentFactory.create("CARD");

Plus propre et centralisé


4. Structure

  • interface ou classe abstraite (Payment)
  • classes concrètes (CardPayment, PaypalPayment)
  • factory (PaymentFactory)

5. Avantages

  • réduit le couplage
  • centralise la création
  • facilite les modifications
  • améliore la lisibilité

6. Pièges

  • trop de logique dans la factory
  • utilisation abusive
  • ne pas confondre avec DI (Dependency Injection)

7. Variante : Factory Method

abstract class Creator {
    abstract Product create();
}

chaque sous-classe décide quoi créer


8. Quand utiliser ?

  • plusieurs types d’objets
  • logique de création complexe
  • besoin de flexibilité

9. Questions classiques

Q1

Pourquoi utiliser une factory ? centraliser la création


Q2

Avantage principal ? réduction du couplage


Q3

remplace new ? souvent oui


10. À retenir

  • Factory = création d’objet centralisée
  • évite le new partout
  • améliore la maintenabilité
  • très utilisé en backend

🧾 En résumé

  • encapsule la création d’objets
  • réduit les dépendances
  • rend le code plus flexible

C’est un pattern simple mais très puissant pour structurer une application.


Voir aussi