Builder в JS

Builder (cтроитель) - порождающий шаблон программирования. Применяется для создания сложных объектов при помощи цепочки методов someBuilder->setValueA(1)->setValueB(2)->build()

Пример использования builder'a из документации NestJS OpenAPI . Source code

  const options = new DocumentBuilder()
    .setTitle('Cats example')
    .setDescription('The cats API description')
    .setVersion('1.0')
    .addTag('cats')
    .addBearerAuth()
    .build();

На примере создания пиццы:

class Pizza {
  constructor(builder) {
    this.size = builder.size;
    this.cheeze = builder.cheeze || false;
    this.pepperoni = builder.pepperoni;
    this.tomato = builder.tomato || false;
    if (builder.date) {
      this.date = builder.date || new Date();
    }
    this.address = builder.address;
  }
}

class PizzaBuilder {
  pepperoni = false;

  constructor(size) {
    this.size = size;
  }

  addPepperoni() {
    this.pepperoni = true;
    return this;
  }

  addCheeze() {
    this.cheeze = true;
    return this;
  }

  addTomato(count) {
    this.tomato = count;
    return this;
  }

  setDate(date) {
    this.date = date;
    return this;
  }

  setAddress(address) {
    this.address = address;
    return this;
  }

  build() {
    return new Pizza(this);
  }
}

Класс Pizza необязателен, может просто возвращаться объект вида { ... this }.

Использование:

const pizza = new PizzaBuilder(31)
  .addTomato(3)
  .setAddress('Ленина 18')
  .setDate(new Date(2020, 1, 24))
  .build();

Похожие записи

RxJs Subjects

Выдержки из доклада Андрея Алексеева (Tinkoff) про RxJs (Subject, Behaviour Subject, Replay Subject, Async Subject). Применение в Angular.

JS. Get query param

function getQueryParam(item) {
  var svalue = window.location.search.match(new RegExp('[\?\&]' + item + '=([^\&]*)(\&?)', 'i'));
  return svalue ? svalue[1] : svalue;
}

// /foo/bar/baz.html?lang=ru
var lang = getQueryParam('lang') || 'en';