Usefall
The Builder Pattern
Purpose
A complex thing needs to be created.
I want to simplify its creation.
Leopard
I really want to build a fancy house but it’s too complicated!
class House {
construct(material, doors, windows) {
this.material = material;
this.doors = doors;
this.windows = windows;
}
}
Leopard
Lightning Sloth, please help me!
Lightning Sloth
Sure. Describe the house you want to me.
class LightningSlothTheBuilder {
houseMaterial;
doors = [];
windows = [];
madeOf(material) {
this.houseMaterial = material;
return this;
}
withDoor(material) {
this.doors.push(new Door(material));
return this;
}
withWindow(material) {
this.windows.push(new Window(material));
return this;
}
}
Leopard
The house should be made of dirt.
It should have a door made of diamond.
It should have a door made of emerald.
It should have a window made of steel.
const lightningSlothTheBuilder = new LightningSlothTheBuilder();
const leopardHouse = lightningSlothTheHouseBuilder
.houseMaterial("dirt")
.withDoor("diamond")
.withDoor("emerald")
.withWindow("steel");
Lightning Sloth
All done!
Leopard
What!? How did you finish so fast!?
Lightning Sloth
I focused on noting down all the things you described,
gradually, one by one, step by step.
Everytime I noted something down,
I returned myself so I can note the next thing.
Then I finally built the house.
Leopard
Wow thanks! You are so cool!
Lightning Sloth
I know. Sometimes you gotta go slow to go fast. Hehe.
Solution
Have a separate thing gradually handle object creation (a builder).
Gradually describe all the parts that are needed to the builder, finally tell the builder to create the thing you want.
Leopard
Lightning Sloth