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

Паттерн Observer (Наблюдатель) позволяет объекту (издателю) уведомлять другие объекты (подписчики) об изменениях своего состояния без жесткой связи между ними.

Короткий ответ

Что ответить на собеседовании

Паттерн Observer (Наблюдатель) позволяет объекту (издателю) уведомлять другие объекты (подписчики) об изменениях своего состояния без жесткой связи между ними. Издатель хранит список подписчиков и оповещает их при изменениях.

Подробный разбор

Ответ с пояснениями

Паттерн 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

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

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее