Фабричный метод — это порождающий паттерн проектирования, который определяет общий интерфейс для создания объектов в суперклассе, позволяя подклассам изменять тип создаваемых объектов.
В PHP, в отличии от других некоторых языков конструктор один. Из-за чего объект нельзя создать несколькими способами, с другими бизнес правилами. Поэтому принято конструктор делать
приватным, а объект создавать через фабричные методы вроде
create(),
requestJoinByEmail(),
joinByNetwork() и другие.
Возьмём всем известных User-ов, которые могут появиться в нашей системе по-разному:
1. Создание пользователя Администратором через метод
create().
2. Регистрацией пользователя по Email через метод
requestJoinByEmail().
3. Регистрацией пользователя через социальную сеть через метод
joinByNetwork().
Таким образом наш объект становится более гибким и содержит в себе разные бизнес требования к состоянию в зависимости от способа его создания.
Чтобы хорошо понять суть рекомендую прочитать полезный ресурс —
Refactoring Guru - Фабричный метод.