Sobes.tech
Назад к вопросам
Junior — Middle
69

Можете объяснить, как работает паттерн Observer и в каких случаях его используют?

Ответ от нейросети

sobes.tech 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 updated to \(value)")
    }
}

let subject = Subject()
let observer = ConcreteObserver()
subject.addObserver(observer)
subject.setValue(10)  // Выведет: Value updated to 10

Используют, когда нужно отделить источник данных от потребителей и обеспечить гибкую подписку на события.