Sobes.tech
Junior — Middle

Може ли да се реализира механизъм за уведомяване на няколко обекта едновременно с помощта на патърна Observer?

sobes.tech AI

Отговор от AI

Да, патърнът Observer е предназначен специално за уведомяване на няколко обекта за промените в състоянието на субекта. В този патърн има обект-субект, който поддържа списък с наблюдатели (обекти), записани за неговите събития. Когато състоянието на субекта се променя, той последователно уведомява всички абонати.

Пример на 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() {
        // промяна на състоянието
        notify() // уведомяваме всички
    }
}

class ConcreteObserver: Observer {
    func update() {
        print("Получено уведомление")
    }
}

let subject = Subject()
let observer1 = ConcreteObserver()
let observer2 = ConcreteObserver()
subject.attach(observer1)
subject.attach(observer2)
subject.changeState() // и двамата наблюдатели ще получат уведомление

По този начин, патърнът Observer позволява реализирането на механизъм за множествено уведомяване.