JS Паттерны: Abstract Factory

Шаблон проектирования Abstract Factory используется в случаях когда нужно добавить дополнительный слой абстракции над паттерном Factory.

Допустим есть следующие реализации классов разным моделей автомобилей:

class BMW_1_Series {}
class BMW_M_Series {}

А также, пусть существуют фабрики для этих классов:

function bmwFamilyfactory() {
  return new BMW_1_Series()
}
function bmwSportFactory() {
  return new BMW_M_Series()
}

Пример реализации функции абстрактной фабрики:

// Abstract Factory
function bmwProducer(type) {
  switch (type) {
    case 'sport': return bmwSportFactory;
    case 'family': return bmwFamilyfactory;
    default: return null;
  }
}

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

// Abstract Factory
const produceSport = bmwProducer('sport');
const sportCar = produceSport();

const produceFamily = bmwProducer('family');
const familyCar = produceFamily();

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