Sobes.tech
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.