Sobes.tech
Junior — Middle

Da li je moguće implementirati mehanizam obaveštavanja više objekata istovremeno pomoću obrasca Observer?

sobes.tech АИ

Одговор од АИ

Da, obrazaćać Observer je namenjen posebno za obaveštavanje više objekata o promenama stanja subjekta. U ovom obrascu, postoji objekat-subjekt koji održava listu posmatrača (objekata) koji su prijavljeni na njegove događaje. Kada se stanje subjekta promeni, on redom obaveštava sve pretplatnike.

Primer u Swift:

protocol Observer {
    func update()
}

class Subject {
    private var observers = [Observer]()

    func attach(_ observer: Observer) {
        observers.append(observer)
    }

    func notify() {
        observers.forEach { $0.update() }
    }

    func changeState() {
        // promena stanja
        notify() // obaveštavamo sve
    }
}

class ConcreteObserver: Observer {
    func update() {
        print("Primljeno obaveštenje")
    }
}

let subject = Subject()
let observer1 = ConcreteObserver()
let observer2 = ConcreteObserver()
subject.attach(observer1)
subject.attach(observer2)
subject.changeState() // oba posmatrača će dobiti obaveštenje

Na ovaj način, obrazac Observer omogućava implementaciju mehanizma višestrukog obaveštavanja.