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 позволява реализирането на механизъм за множествено уведомяване.