Gazar Avatar

GAZAR

Principal Engineer | MentorHey, I'm Gazar. I teach developers and lead teams. Let's build your future.


Builder Design Pattern

The Builder Design Pattern is particularly useful when an object's construction process involves multiple steps or configurations. It provides a clear and fluent interface for constructing objects, allowing clients to specify different configurations without needing to understand the complex construction logic.

class Pizza {
  constructor() {
    this.crust = "";
    this.sauce = "";
    this.toppings = [];
  }

  addCrust(crust) {
    this.crust = crust;
  }

  addSauce(sauce) {
    this.sauce = sauce;
  }

  addTopping(topping) {
    this.toppings.push(topping);
  }

  describe() {
    console.log(`Pizza with ${this.crust} crust, ${this.sauce} sauce, and toppings: ${this.toppings.join(", ")}.`);
  }
}

// Builder class
class PizzaBuilder {
  constructor() {
    this.pizza = new Pizza();
  }

  addCrust(crust) {
    this.pizza.addCrust(crust);
    return this;
  }

  addSauce(sauce) {
    this.pizza.addSauce(sauce);
    return this;
  }

  addTopping(topping) {
    this.pizza.addTopping(topping);
    return this;
  }

  build() {
    return this.pizza;
  }
}

// Usage
const pizza = new PizzaBuilder()
  .addCrust("thin")
  .addSauce("tomato")
  .addTopping("cheese")
  .addTopping("mushrooms")
  .build();

pizza.describe();

PizzaBuilder serves as the builder class, providing methods for adding crust, sauce, and toppings to the pizza.

The Builder Design Pattern offers a flexible and fluent way to construct complex objects with multiple configurations. By encapsulating the construction logic within a builder class, developers can create objects with different representations while keeping the client code clean and easy to understand.

Comments