> В чем разница между фабрикой и обычным конструктором (Go)

Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: Wildberries

Стек: Go

> Пример ответа

Основное различие между фабрикой и обычным конструктором в Go - в уровне абстракции и контроле над созданием объекта.

Обычный конструктор (например, NewUser(name string) *User) - это простая функция, которая возвращает экземпляр структуры. Он подходит, когда логика создания тривиальна: выделение памяти, инициализация полей, базовая валидация. В Go нет встроенных конструкторов, поэтому такие функции - стандартный паттерн.

Фабрика (Factory) - это более сложный паттерн, который решает задачи, непосильные для простого конструктора:

  • Выбор реализации: фабрика может возвращать разные типы, удовлетворяющие общему интерфейсу, в зависимости от входных параметров (например, NewParser("json") вернёт JSONParser, а NewParser("xml") - XMLParser).
  • Сокрытие сложной логики: создание объекта может требовать настройки зависимостей, подключения к БД, чтения конфигурации - фабрика инкапсулирует этот процесс.
  • Управление пулом объектов: фабрика может возвращать уже существующие объекты (например, из пула соединений) вместо создания новых.
  • Тестирование: фабрику легко замокать, подменив возвращаемый тип.

Пример в Go:

GO
// Простой конструктор
func NewLogger(level string) *Logger {
return &Logger{level: level}
}
// Фабрика с интерфейсом
type Logger interface {
Log(msg string)
}
func NewLoggerFactory(level string) Logger {
switch level {
case "debug":
return &DebugLogger{}
case "prod":
return &ProdLogger{}
default:
return &DefaultLogger{}
}
}

Итог: используйте конструктор для простых случаев, фабрику - когда нужно динамическое создание, сокрытие сложности или полиморфизм.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью