La méthode Factory est un modèle de conception créationnel qui définit une interface pour créer un objet mais laisse les sous-classes décider quelle classe instancier. Au lieu d'appeler un constructeur directement avec new, vous appelez une méthode de fabrique - et la sous-classe détermine le type concret.

Idée de base : déléguer la création d’objets aux sous-classes. La classe Creator déclare la méthode factory ; chaque créateur concret le remplace pour produire un produit spécifique.
Le problème qu'il résout

Imaginez que vous créez une application logistique. Au départ, elle ne s'occupait que des camions. Vous codez en dur new Truck() partout. L’entreprise a alors besoin du transport maritime. Il faut désormais changer tous les lieux qui créent du transport. La méthode Factory vous permet d'isoler la logique de création, de sorte que l'ajout d'un nouveau type de transport ne nécessite qu'une nouvelle sous-classe.

Cliquez pour animer le flux de création ▶
Créateur
déclare createTransport()
Méthode d'usine
remplacé par une sous-classe
Créateur de béton
CamionLogistique
Produit
Camion : Transport
Structure
Cliquez sur un rôle pour savoir ce qu'il fait
Exemple de code
java
// Product interface
interface Transport {
    void deliver();
}

// Concrete Products
class Truck implements Transport {
    @Override
    public void deliver() {
        System.out.println("Delivering by land in a truck");
    }
}

class Ship implements Transport {
    @Override
    public void deliver() {
        System.out.println("Delivering by sea in a container ship");
    }
}
Étape par étape : que se passe-t-il au moment de l'exécution
Cliquez sur chaque étape pour voir les détails
Quand utiliser la méthode d'usine
Cliquez pour développer chaque scénario
Compromis : la méthode Factory peut conduire à de nombreuses hiérarchies de sous-classes parallèles – un ConcreteCreator pour chaque ConcreteProduct. Si la hiérarchie s’agrandit, envisagez plutôt Abstract Factory ou Prototype.
Méthode Factory dans la bibliothèque standard Java
Cliquez sur les lignes en surbrillance pour voir le motif en action
java
1
// java.util.Collection — iterator() is a factory method
2
List<String> list = new ArrayList<>();
3
Iterator<String> it = list.iterator();
4
5
// java.nio.file.Files — static factory methods
6
Path path = Path.of("/tmp/file.txt");
7
8
// java.util.Calendar
9
Calendar cal = Calendar.getInstance();
À retenir : la méthode Factory favorise le principe ouvert/fermé : vous pouvez ajouter de nouveaux types de produits (nouveau transport) sans modifier le code créateur existant (Logistics.planDelivery).