Sobes.tech
Junior — Middle

Можете ли да обясните как работи патърнът Observer и в кои случаи се използва?

sobes.tech AI

Отговор от AI

Моделът Observer (наблюдател) позволява на обект (издателят) да уведомява други обекти (подписчиците) за промени в състоянието си без строга връзка между тях. Издателят поддържа списък с подписчици и ги уведомява при промени.

Този модел често се използва за реализиране на системи за събития, например в 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

Използва се, когато е необходимо да се отдели източникът на данни от потребителите и да се осигури гъвкаво абониране за събития.