Junior — Middle
Czy możesz wyjaśnić, jak działa wzorzec Observer i w jakich przypadkach jest używany?
sobes.tech AI
Odpowiedź od AI
Wzorzec Observer (Obserwator) pozwala obiektowi (wydawcy) powiadamiać inne obiekty (subskrybentów) o zmianach swojego stanu bez sztywnego powiązania między nimi. Wydawca przechowuje listę subskrybentów i powiadamia ich o zmianach.
Ten wzorzec jest często używany do implementacji systemów zdarzeń, na przykład w iOS — NotificationCenter, KVO (Key-Value Observing) lub delegaty.
Przykład w Swift:
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("Zaktualizowana wartość: \(value)")
}
}
let subject = Subject()
let observer = ConcreteObserver()
subject.addObserver(observer)
subject.setValue(10) // Wypisze: Zaktualizowana wartość: 10
Używa się, gdy konieczne jest oddzielenie źródła danych od konsumentów i zapewnienie elastycznego subskrybowania zdarzeń.