Sobes.tech
Junior — Middle

Kas saaksite selgitada, kuidas töötab Observer muster ja millistel juhtudel seda kasutatakse?

sobes.tech AI

Vastus AI-lt

Jälgija (Observer) muster võimaldab objektil (kirjastajal) teavitada teisi objekte (tellijad) oma oleku muutustest ilma nende vahel rangelt seotud. Kirjastaja hoiab nimekirja tellijatest ja teavitab neid muutustest.

Seda muster kasutatakse sageli sündmuste süsteemide rakendamiseks, näiteks iOS-is — NotificationCenter, KVO (Key-Value Observing) või delegaatide kaudu.

Näide Swiftis:

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("Väärtus uuendatud: \(value)")
    }
}

let subject = Subject()
let observer = ConcreteObserver()
subject.addObserver(observer)
subject.setValue(10)  // Väljund: Väärtus uuendatud: 10

Kasutatakse, kui on vaja eraldada andmeallikas tarbijatest ja tagada paindlik sündmuste tellimine.