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.