Aller au contenu

Builder (Monteur)

Problème

Les fabriques traitent principalement l'instanciation de classes en présence d'une hiérarchie.

Le patron de conception Builder (Monteur) s'attaque à l'instanciation de classes avec des états ou relations complexes. Il sera utile pour éviter :

  • De nombreux appels à des accesseurs (set, add, etc.)
  • La multiplication des constructeurs

Solution

Dans sa forme originale, le patron de conception monteur préconise de déléguer la complexité de la construction à des instances dédiées (Builder et Director) comme suit :

UML Builder

Source https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Builder où un exemple en Java est disponible avec :

  • Des Pizza (Product)
  • Une interface MonteurPizza (Builder) avec deux implémentations (ConcreteBuilder)
    • MonteurPizzaReine
    • MonteurPizzaPiquante
  • Un Serveur (Director)

Variantes

Absence de Director

En pratique, la distinction est rarement faite entre "Director" et "Builder". La terminologie builder est généralisée à la création incrémentale d'objet :

  • Création ou récupération d'un builder
  • Appels successifs au builder pour fournir les informations permettant de construire l'objet (add, set, etc...)
  • Récupération de l'instance produite

Par exemple, avec un DelaunayTriangulationBuilder implémentant une triangulation de Delaunay :

const builder = new DelaunayTriangulationBuilder();
for ( const point of points ){
  builder.addPoint(point);
}
builder.getTriangles();

Liens utiles