JS Паттерны: Factory

Данный шаблон полезен в случае когда нужно создавать объекты одно класса с разными входными данными. Например, создание автомобилей одной марки с разными характеристиками.

Допустим, имеем следующий класс автомобиля:

class BMW {
  constructor(model, propA, propB) {
    this.model = model
    this.propA = propA
    this.propB = propB
  }
}

Простой фабричный класс для данного класса может выглядеть следующим образом:

class BMWFactory {
  create(model) {
    switch(model) {
      case 'X1':
        return new BMW(model, 1, 2)
        break;
      case 'X2':
        return new BMW(model, 3, 4)
        break;
      case 'X3':
        return new BMW(model, 4, 5)
        break;
      // ... и тд.
    }
  }
}

Теперь чтобы создать X2 с помощью Factory достаточно вызвать метод create:

const factory = new BMWFactory()
const x2 = factory.create('X2')

Данный пример является простейшей демонстрацией принципа. Метод create может быть расширен в соответствии с требованиями проекта или отдельной задачи.

В следующей статье рассмотрим шаблон проектирования Abstract Factory, который расширяет возможности шаблона Factory.