Nota bene : Ce contenu a été généré par IA. Je suis en train de travailler sur cette page pour proposer un contenu personnel et d'une meilleure qualité.

Builder

Nota bene : Ce contenu a été généré par IA. Je suis en train de travailler sur cette page pour proposer un contenu personnel et d'une meilleure qualité.

L'idée en bref

Le pattern Builder sert à fabriquer un objet composé de plusieurs parties, en plusieurs étapes, tout en gardant le code lisible.

Au lieu d'appeler un constructeur avec 12 arguments dont la moitié sont None, on enchaîne des méthodes explicites (avec_pate(), avec_sauce(), etc.) puis on finalise avec build().

À retenir : on sépare comment on construit l'objet de ce qu'on obtient à la fin. Le builder accumule les choix ; build() produit le résultat final.

C'est utile quand :

  • beaucoup d'options sont optionnelles ;
  • l'ordre des étapes compte ;
  • on veut empêcher un objet incomplet d'exister (tant que build() n'a pas été appelé).

Exemple : une pizza en plusieurs étapes

Imaginons une Pizza dont la recette se compose au fil de l'eau. Le builder rend chaque choix visible dans le code.

Chargement…

Sortie console

Pizza(pâte:fine, sauce:tomate, garniture:mozzarella, garniture:basilic)

Chaque méthode du builder retourne self : c'est ce qui permet la chaîne .pate(...).sauce(...).build().

Exemple : filtrer un rapport de données

Même logique côté data : un rapport peut avoir un titre, des filtres, un tri et un format d'export — sans tout passer au constructeur d'un coup.

Chargement…

Sortie console

Ventes Q1 | filtres=[('region', '=', 'EU'), ('montant', '>', 1000)] | tri=date | export=xlsx

Ici le builder évite un appel du type Rapport(titre, filtres, tri, format, ...) difficile à lire et à faire évoluer quand on ajoute une nouvelle option.