Junior — Middle
Можете ли да објасните како ради образац Observer и у којим случајевима се користи?
sobes.tech АИ
Одговор од АИ
Модел Обзервер (Посматрач) омогућава објекту (издавачу) да обавештава друге објекте (претплатнике) о променама његовог стања без чврсте везе између њих. Издавач чува листу претплатника и их обавештава при променама.
Овај модел се често користи за имплементацију система догађаја, на пример, у iOS — NotificationCenter, KVO (Key-Value Observing) или делегати.
Пример у 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("Вредност ажурирана на \(value)")
}
}
let subject = Subject()
let observer = ConcreteObserver()
subject.addObserver(observer)
subject.setValue(10) // Испис: Вредност ажурирана на 10
Користи се када је потребно одвојити извор података од потрошача и обезбедити флексибилно претпремање на догађаје.