Назад к вопросам
Junior — Middle
75
Какое основное отличие между паттернами Builder и Factory в объектно-ориентированном программировании?
Компании, где спрашивали
Мидлэнд
bip.ru
Ответ от нейросети
sobes.tech AI
Основное отличие между паттернами Builder и Factory заключается в их назначении и процессе создания объектов.
-
Factory (Фабрика) — это паттерн, который отвечает за создание объектов определённого семейства или типа. Он скрывает логику выбора конкретного класса для создания и возвращает готовый объект. Обычно используется, когда нужно создавать объекты с разной реализацией, но с одинаковым интерфейсом.
-
Builder (Строитель) — паттерн, который позволяет пошагово создавать сложный объект, отделяя процесс конструирования от представления. Он полезен, когда объект состоит из множества частей и конфигураций, и нужно гибко управлять процессом сборки.
Пример:
- Factory создаёт разные виды автомобилей (седан, внедорожник) по запросу.
- Builder позволяет собрать автомобиль по частям: двигатель, колёса, кузов, опции, шаг за шагом.
// Factory
protocol Car { func drive() }
class Sedan: Car { func drive() { print("Driving sedan") } }
class SUV: Car { func drive() { print("Driving SUV") } }
class CarFactory {
static func createCar(type: String) -> Car? {
switch type {
case "sedan": return Sedan()
case "suv": return SUV()
default: return nil
}
}
}
// Builder
class CarBuilder {
private var engine: String = ""
private var wheels: Int = 0
func setEngine(_ engine: String) -> CarBuilder {
self.engine = engine
return self
}
func setWheels(_ count: Int) -> CarBuilder {
self.wheels = count
return self
}
func build() -> Car {
// Возвращаем объект с заданными параметрами
return CustomCar(engine: engine, wheels: wheels)
}
}
class CustomCar: Car {
let engine: String
let wheels: Int
init(engine: String, wheels: Int) {
self.engine = engine
self.wheels = wheels
}
func drive() {
print("Driving car with engine: \(engine) and wheels: \(wheels)")
}
}