Данный шаблон полезен в случае когда нужно создавать объекты одно класса с разными входными данными. Например, создание автомобилей одной марки с разными характеристиками.
Допустим, имеем следующий класс автомобиля:
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.