Sobes.tech
Junior — Middle

Můžete vysvětlit, jak funguje vzor Observer a v jakých případech se používá?

sobes.tech AI

Odpověď od AI

Vzor Observer (Pozorovatel) umožňuje objektu (vydavateli) upozorňovat jiné objekty (odběratele) na změny svého stavu bez pevného spojení mezi nimi. Vydavatel uchovává seznam odběratelů a informuje je při změnách.

Tento vzor se často používá k implementaci systémů událostí, například v iOS — NotificationCenter, KVO (Key-Value Observing) nebo delegáti.

Příklad v 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("Hodnota byla aktualizována na \(value)")
    }
}

let subject = Subject()
let observer = ConcreteObserver()
subject.addObserver(observer)
subject.setValue(10)  // Výstup: Hodnota byla aktualizována na 10

Používá se, když je třeba oddělit zdroj dat od spotřebitelů a zajistit flexibilní přihlášení k událostem.