Junior — Middle
Lehet-e több objektum értesítési mechanizmust egyszerre megvalósítani az Observer mintával?
sobes.tech MI
Válasz az MI-től
Igen, a Megfigyelő mintázat kifejezetten arra készült, hogy több objektumot értesítsen a tárgy állapotának változásairól. Ebben a mintában van egy tárgy-objektum, amely nyilvántartja az eseményekre feliratkozott megfigyelőket (objektumokat). Amikor a tárgy állapota megváltozik, sorban értesíti az összes feliratkozottat.
Swift példával:
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() {
// állapot változása
notify() // mindenki értesítése
}
}
class ConcreteObserver: Observer {
func update() {
print("Értesítés érkezett")
}
}
let subject = Subject()
let observer1 = ConcreteObserver()
let observer2 = ConcreteObserver()
subject.attach(observer1)
subject.attach(observer2)
subject.changeState() // mindkét megfigyelő értesítést kap
Így az Observer minta lehetővé teszi több értesítési mechanizmus megvalósítását.