Sobes.tech
Junior — Middle

Czy można zaimplementować mechanizm powiadamiania wielu obiektów jednocześnie za pomocą wzorca Observer?

sobes.tech AI

Odpowiedź od AI

Tak, wzorzec Observer jest specjalnie przeznaczony do powiadamiania wielu obiektów o zmianach stanu obiektu. W tym wzorcu istnieje obiekt-obiekt, który przechowuje listę obserwatorów (obiektów) zapisanych na jego zdarzenia. Gdy stan obiektu się zmienia, kolejno powiadamia wszystkich subskrybentów.

Przykład w 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() {
        // zmiana stanu
        notify() // powiadamiamy wszystkich
    }
}

class ConcreteObserver: Observer {
    func update() {
        print("Otrzymano powiadomienie")
    }
}

let subject = Subject()
let observer1 = ConcreteObserver()
let observer2 = ConcreteObserver()
subject.attach(observer1)
subject.attach(observer2)
subject.changeState() // obie obserwacje otrzymają powiadomienie

W ten sposób, wzorzec Observer umożliwia zaimplementowanie mechanizmu wielokrotnego powiadamiania.