Sobes.tech
Back to questions
Junior — Middle
70

Можете объяснить принципы работы и назначение паттерна Service Locator?

Answer from AI

sobes.tech AI

Паттерн Service Locator используется для управления зависимостями в приложении. Он предоставляет централизованный объект (локатор), который отвечает за предоставление нужных сервисов или компонентов по запросу.

Основные принципы:

  • В приложении есть глобальный или локальный реестр сервисов.
  • Клиенты запрашивают сервисы у локатора, не создавая их напрямую.
  • Локатор инкапсулирует логику создания и конфигурации сервисов.

Назначение:

  • Упрощение доступа к сервисам.
  • Централизация конфигурации зависимостей.
  • Снижение связности между компонентами.

Пример на C#:

public interface IService {}
public class ServiceA : IService {}

public class ServiceLocator
{
    private static readonly Dictionary<Type, object> services = new Dictionary<Type, object>();

    public static void Register<T>(T service) where T : class
    {
        services[typeof(T)] = service;
    }

    public static T Get<T>() where T : class
    {
        services.TryGetValue(typeof(T), out var service);
        return service as T;
    }
}

// Использование
ServiceLocator.Register<IService>(new ServiceA());
var service = ServiceLocator.Get<IService>();

Однако паттерн критикуется за скрытую зависимость и усложнение тестирования, поэтому часто предпочтительнее использовать Dependency Injection.