Ответ
Паттерн 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 — это как раз та штука, которая делает тебя не тем мудаком, который везде размазывает логику создания, а тем адекватным чуваком, который подумал на шаг вперёд. Ёпта, вот и весь сказ.