Junior — Middle
Puoi spiegare come funziona il pattern Observer e in quali casi viene utilizzato?
sobes.tech AI
Risposta dell'AI
Il pattern Observer (Osservatore) consente a un oggetto (l'emittente) di notificare altri oggetti (gli iscritti) sui cambiamenti del suo stato senza una stretta connessione tra loro. L'emittente mantiene una lista di iscritti e li avvisa quando ci sono cambiamenti.
Questo pattern è spesso usato per implementare sistemi di eventi, ad esempio in iOS — NotificationCenter, KVO (Key-Value Observing) o delegati.
Esempio in 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("Valore aggiornato a \(value)")
}
}
let subject = Subject()
let observer = ConcreteObserver()
subject.addObserver(observer)
subject.setValue(10) // Stampa: Valore aggiornato a 10
Viene usato quando è necessario separare la fonte dei dati dai consumatori e garantire una sottoscrizione flessibile agli eventi.