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.