Как работает Service Locator?
Создаёт обьект и передаёт его или только определяет и конфигурирует, а создаёт фабрика
Именно так. Мы когда регистрируем сервис в сервис локаторе, у нас появляются фабрики сервисов. Они могут быть явными (то есть мы явно пишем код который занимается созданием объектов, например так сделано в pimple) или не явно (всякие автоконфигураторы на основе рефлексий как в PHP-DI или конфиги в Symfony). Так или иначе у нас будут появляться фабрики.
Сервис локатор по запросу сервиса проверяет создавал ли он такой или нет. И если нет - просит фабрику сделать сервис и выплевывает его тому кто запросил.
Сервис Локатор - паттерн проектирования.
Реализуется, как класс-контейнер.
Центральный объект - массив, в который заносятся переменные-сервисы, а также информация каким образом создавать эти сервисы:
- непосредственным созданием объекта класса-сервиса,
- создания класса-сервиса через фабрику,
- создания класса-сервиса через абстрактную фабрику,
...
Также возможно создание класса-сервиса единожды или несколько подобных объектов...