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 :
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 ne sera pas toujours 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();