Skip to content

Instantly share code, notes, and snippets.

@Dammmien
Last active July 7, 2018 23:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Dammmien/36f9a871f58e98a36e78dcfc543f36fb to your computer and use it in GitHub Desktop.
Save Dammmien/36f9a871f58e98a36e78dcfc543f36fb to your computer and use it in GitHub Desktop.
JavaScript Builder design pattern
class MealBuilder {
init() {
this.meal = new Meal();
}
addMain(type) {
this.meal.main = new MainItem(type);
}
addSide(type) {
this.meal.side = new SideItem(type);
}
addDrink(type) {
this.meal.drink = new DrinkItem(type);
}
addToy(type) {
this.meal.toy = new ToyItem(type);
}
get() {
return this.meal;
}
}
class MealDirector {
create(main, side, drink, toy) {
const builder = new MealBuilder();
builder.init();
builder.addMain(main);
builder.addSide(side);
builder.addDrink(drink);
builder.addToy(toy);
return builder.get();
}
}
const mealDirector = new MealDirector();
mealDirector.create('hamburger', 'fries', 'coke', 'car');
@legndery
Copy link

legndery commented Jul 7, 2018

I think builder should return a reference to itself for chaining. Like

builder.init()
    .addMain(main)
    .addSide(side)
    .addDrink(drink)
    .addToy(toy)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment