Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про PHP: factory, method

Как работает паттерн «Фабричный метод» и когда его целесообразно использовать?

Вопрос проверяет понимание принципа фабричного создания объектов и умение объяснить, зачем нужны фабрики.

Короткий ответ

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

Длинный ответ

Паттерн «Фабричный метод»

Определение: Фабричный метод — это паттерн, который делегирует создание объектов в специализированный метод, позволяя подклассам определять, какой объект создавать.

1. Проблема, которую решает фабрика

Типичный "плохой" код:

php

class NotificationService {
    public function send(string $type) {
        if ($type === 'email') return new EmailSender();
        if ($type === 'sms') return new SmsSender();
        // ...
    }
}

Минусы:

  • высокий уровень связности

  • нарушается OCP

  • трудно расширять (каждый раз меняем код)

  • в тестах инициализация усложняется

2. Идея фабричного метода

Создание объекта переносится в специальный метод, который можно переопределять.

Интерфейс:

php

abstract class NotifierFactory {
    abstract public function createSender(): SenderInterface;
}

Конкретная фабрика:

php

class EmailFactory extends NotifierFactory {
    public function createSender(): SenderInterface {
        return new EmailSender();
    }
}

Использование:

php

$factory = new EmailFactory();
$sender = $factory->createSender();
$sender->send("test");

Клиент знает только фабрику и абстракцию — не реализацию.

3. Зачем нужен фабричный метод

  1. Инкапсулирует логику создания объектов
    Легче поддерживать и модифицировать.

  2. Позволяет подменять конкретные реализации
    Особенно важно при тестировании и модульной архитектуре.

  3. Расширяемость
    Чтобы добавить новый тип объекта, достаточно создать новую фабрику.

  4. Отделяет создание объекта от использования
    Клиент не обязан знать особенности создания.

4. Когда использовать

  • когда объект требует подготовки (конфигурации)

  • когда создание зависит от параметров среды

  • когда нужно выбирать между несколькими реализациями

  • когда объект является частью семейств (экспортёр, логгер, драйвер)

  • когда нужно уменьшить зависимость от new

5. Вывод

Фабричный метод — это паттерн, который делает создание объектов гибким и расширяемым. Он идеально подходит для систем, где количество вариантов объектов растёт и изменяется со временем.

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • PHP

    PHP

Ключевые слова

#factory

#method

Подпишись на PHP Developer в телеграм

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.