Sobes.tech
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í.