Junior — Middle
El tudnád magyarázni, hogyan működik az Observer minta és milyen esetekben használják?
sobes.tech MI
Válasz az MI-től
A Megfigyelő (Observer) minta lehetővé teszi egy objektum (kibocsátó) számára, hogy értesítse más objektumokat (feliratkozókat) az állapotának változásairól anélkül, hogy szoros kapcsolat lenne közöttük. A kibocsátó fenntart egy listát a feliratkozókról, és értesíti őket, amikor változás történik.
Ezt a mintát gyakran használják eseményalapú rendszerek megvalósítására, például iOS-en — NotificationCenter, KVO (Key-Value Observing) vagy delegáltak.
Swift példával:
protocol Observer: AnyObject {
func update(value: Int)
}
class Subject {
private var observers = [Observer]()
private var value: Int = 0 {
didSet {
notify()
}
}
func addObserver(_ observer: Observer) {
observers.append(observer)
}
func setValue(_ newValue: Int) {
value = newValue
}
private func notify() {
observers.forEach { $0.update(value: value) }
}
}
class ConcreteObserver: Observer {
func update(value: Int) {
print("Érték frissítve: \(value)")
}
}
let subject = Subject()
let observer = ConcreteObserver()
subject.addObserver(observer)
subject.setValue(10) // Kimenet: Érték frissítve: 10
Ezt akkor használják, amikor szükséges elkülöníteni az adatforrást a fogyasztóktól, és biztosítani a rugalmas eseményfeliratkozást.