Sobes.tech
Junior — Middle

Poți explica cum funcționează pattern-ul Observer și în ce cazuri este utilizat?

sobes.tech AI

Răspuns de la AI

Modelul Observer (Observator) permite unui obiect (publicatorul) să notifice alte obiecte (abonamentele) despre schimbările din starea sa fără o legătură strânsă între ele. Publicatorul păstrează o listă de abonați și îi notifică atunci când apar schimbări.

Acest model este adesea folosit pentru implementarea sistemelor de evenimente, de exemplu, în iOS — NotificationCenter, KVO (Key-Value Observing) sau delegați.

Exemplu în Swift:

protocol Observer: AnyObject {
    func update(value: Int)
}

class Subject {
    private var observers = [Observer]()
    private var value: Int = 0 {
        didSet {
            notify()
        }
    }
    
    func addObserver(_ observer: Observer) {
        observers.append(observer)
    }
    
    func setValue(_ newValue: Int) {
        value = newValue
    }
    
    private func notify() {
        observers.forEach { $0.update(value: value) }
    }
}

class ConcreteObserver: Observer {
    func update(value: Int) {
        print("Valoare actualizată la \(value)")
    }
}

let subject = Subject()
let observer = ConcreteObserver()
subject.addObserver(observer)
subject.setValue(10)  // Va afișa: Valoare actualizată la 10

Se folosește atunci când este necesar să se separe sursa de date de consumatori și să se asigure o abonare flexibilă la evenimente.