Sobes.tech
Junior — Middle

Czy możesz wyjaśnić zasadę działania wzorca Service Locator i jego zastosowanie w architekturze aplikacji?

sobes.tech AI

Odpowiedź od AI

Wzorzec Service Locator jest używany do zarządzania zależnościami w aplikacji. Jego istota polega na tym, że istnieje scentralizowany obiekt — lokalizator usług, który wie, jak tworzyć i dostarczać potrzebne usługi (obiekty odpowiedzialne za określone funkcje).

Zastosowanie:

  • Zamiast aby każda klasa bezpośrednio tworzyła lub otrzymywała zależności, odwołuje się do Service Locator.
  • Ułatwia to zamianę implementacji usług (np. do testowania).
  • Pomaga unikać silnego powiązania między komponentami.

Przykład w Swift:

protocol AnalyticsService {
    func track(event: String)
}

class ServiceLocator {
    static let shared = ServiceLocator()
    private var services = [String: Any]()

    func addService<T>(_ service: T) {
        let key = String(describing: T.self)
        services[key] = service
    }

    func getService<T>() -> T? {
        let key = String(describing: T.self)
        return services[key] as? T
    }
}

// Użycie:
let analytics = MyAnalyticsService()
ServiceLocator.shared.addService(analytics)

if let analyticsService: AnalyticsService = ServiceLocator.shared.getService() {
    analyticsService.track(event: "AppStarted")
}

Wady: może utrudniać śledzenie zależności i testowanie, jeśli jest używany bez ostrożności.