Что такое паттерн Factory

Ответ

Паттерн Factory — это порождающий шаблон проектирования, который предоставляет интерфейс для создания объектов, но делегирует выбор их типа подклассам или фабричным методам. Он помогает инкапсулировать логику создания объектов, делая код более гибким и расширяемым.

Пример с кодом:

class Car {
  constructor(model, price) {
    this.model = model;
    this.price = price;
  }
}

class CarFactory {
  create(type) {
    switch(type) {
      case 'Audi': return new Car('Audi', 50000);
      case 'BMW': return new Car('BMW', 60000);
      default: throw new Error('Unknown car type');
    }
  }
}

const factory = new CarFactory();
const bmw = factory.create('BMW'); // Car { model: 'BMW', price: 60000 }

Основные преимущества:

  • Изоляция кода создания объектов
  • Гибкость при добавлении новых типов
  • Упрощение поддержки кода

Ответ 18+ 🔞

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

Вот представь: ты — царь и бог в своём коде, и тебе надо новые объекты штамповать. Можно, конечно, везде new Car() втыкать, как последний распиздяй, но потом, когда типов этих машин станет овердохуища, ты будешь бегать и везде правки вносить, как угорелый. А нам это зачем? Нам лень, блядь!

Вот тут-то и выплывает наш спаситель — паттерн Factory. По сути, это такой хитрожопый посредник, который берёт на себя всю грязную работу по созданию объектов. Ты ему говоришь: «Хочу BMW!», а он тебе: «На, получай, свежесобранный автомобиль, не хуй собачий». И не важно, что там внутри происходит — может, у него там целый конвейер, может, гномики с молоточками, тебе-то какая разница?

Смотри, как это выглядит в коде, без всяких там выебонов:

class Car {
  constructor(model, price) {
    this.model = model;
    this.price = price;
  }
}

class CarFactory {
  create(type) {
    switch(type) {
      case 'Audi': return new Car('Audi', 50000);
      case 'BMW': return new Car('BMW', 60000);
      default: throw new Error('Unknown car type');
    }
  }
}

const factory = new CarFactory();
const bmw = factory.create('BMW'); // Car { model: 'BMW', price: 60000 }

Видишь? Вся логика по выбору модели и цены спрятана внутри фабрики. И плюсы, блядь, очевидны, как хуй с горы:

Во-первых, изоляция. Если завтра тебе взбредёт в голову перед созданием каждой машины гимн России спеть, ты пойдёшь и добавишь это в один-единственный метод create. А не будешь, как маньяк, по всему коду new Car() искать. Чихать тебе на всё, одним местом!

Во-вторых, гибкость. Захотел добавить новую модель «Жигули» за три копейки? Без проблем! Просто дописал ещё один case в этот switch и всё, пизда — система уже умеет создавать и их. Ничего нигде больше не ломается.

Ну и в-третьих, поддержка. Когда через полгода твой коллега-олух будет смотреть на этот код, он не обосрётся с вопросами «а где тут что создаётся?». Всё лежит в одном месте, красиво и понятно. Ну, почти понятно.

Короче, Factory — это как раз та штука, которая делает тебя не тем мудаком, который везде размазывает логику создания, а тем адекватным чуваком, который подумал на шаг вперёд. Ёпта, вот и весь сказ.