Builder

Catégorie

Patron de création

Problème

Créer des objets complexes étape par étape. Le même processus de construction peut créer différentes représentations. Utile lorsqu’un objet nécessite de nombreux paramètres, certains optionnels, et que vous souhaitez éviter les constructeurs télescopiques.

Solution

  • Séparer la construction de l’objet de sa représentation
  • Créer une classe Builder avec des méthodes pour définir chaque partie de l’objet
  • Un Director ou une interface fluide guide le processus de construction
  • L’objet final est récupéré du Builder après que toutes les parties sont définies

Structure

  • Product : L’objet complexe en cours de construction
  • Builder : Interface pour créer des parties du Product
  • ConcreteBuilder : Implémente l’interface Builder ; suit la représentation qu’il crée
  • Director : Construit un objet en utilisant l’interface Builder
  • Client : Crée le Builder, le configure et récupère le Product

Avantages clés

  • Construction étape par étape — Contrôle sur le processus de création
  • Objets immuables — Le Product peut être rendu immuable une fois construit
  • API fluide — Le chaînage de méthodes fournit une interface lisible et expressive
  • Même processus, résultats différents — Différents builders peuvent créer différentes représentations

Compromis

  • Plus de code — Nécessite de créer des classes Builder pour chaque type de produit
  • Exagéré pour les objets simples — Ajoute une complexité inutile pour la construction basique

Quand l’utiliser

  • L’algorithme de création d’un objet complexe doit être indépendant des parties qui le composent
  • La construction doit permettre différentes représentations pour l’objet construit
  • Vous souhaitez éviter un constructeur télescopique (beaucoup de paramètres)
  • Vous devez construire un objet dans un ordre spécifique avec des paramètres optionnels

Exemples