Factory — паттерн создания объектов, скрывающий детали инициализации. В Go это обычная функция-конструктор, начинающаяся с New.
type Storage interface {
Save(data []byte) error
}
func NewStorage(storageType string) Storage {
switch storageType {
case "s3":
return &S3Storage{bucket: "my-bucket"}
case "local":
return &LocalStorage{path: "/data"}
default:
return &LocalStorage{path: "/tmp"}
}
}
В Go нет классов и конструкторов, поэтому функции New* — стандартный подход. Возвращай интерфейс, а не конкретный тип — это даёт гибкость и упрощает тестирование. Фабрика полезна когда создание объекта сложное или зависит от конфигурации.