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.