Sobes.tech
Junior — Middle

Je možné implementovať mechanizmus upozornení viacerých objektov súčasne pomocou vzoru Observer?

sobes.tech AI

Odpoveď od AI

Áno, vzorec Observer je posebej namenjen za obveščanje več objektov o spremembah stanja subjekta. V tem vzorcu obstaja objekt-subjekt, ki hrani seznam opazovalcev (objektov), prijavljenih na njegove dogodke. Ko se stanje subjekta spremeni, ga zaporedno obvesti vse naročnike.

Primer 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() {
        // sprememba stanja
        notify() // obvesti vse
    }
}

class ConcreteObserver: Observer {
    func update() {
        print("Prejeto obvestilo")
    }
}

let subject = Subject()
let observer1 = ConcreteObserver()
let observer2 = ConcreteObserver()
subject.attach(observer1)
subject.attach(observer2)
subject.changeState() // oba opazovalca bosta prejela obvestilo

Tako omogoča vzorec Observer implementacijo mehanizma večkratnih obvestil.