Junior — Middle
Lze implementovat mechanismus upozornění více objektů současně pomocí vzoru Observer?
sobes.tech AI
Odpověď od AI
Ano, vzor Observer je určený špeciálne na upozornenie viacerých objektov na zmeny stavu subjektu. V tomto vzore je objekt-subjekt, ktorý udržiava zoznam pozorovateľov (objektov), ktorí sú prihlásení na jeho udalosti. Keď sa stav subjektu zmení, postupne upozorní všetkých odberateľov.
Príklad v 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() {
// zmena stavu
notify() // upozorni všetkých
}
}
class ConcreteObserver: Observer {
func update() {
print("Prijaté upozornenie")
}
}
let subject = Subject()
let observer1 = ConcreteObserver()
let observer2 = ConcreteObserver()
subject.attach(observer1)
subject.attach(observer2)
subject.changeState() // obaja pozorovatelia dostanú upozornenie
Týmto spôsobom umožňuje vzor Observer implementovať mechanizmus viacerých upozornení.