Sobes.tech
Back to questions
Junior — Middle
67

Каким образом паттерн Observer оповещает зарегистрированные объекты об изменениях?

Answer from AI

sobes.tech AI

Паттерн Observer реализует механизм подписки, где один объект (Subject) хранит список наблюдателей (Observers) и оповещает их об изменениях своего состояния.

Когда состояние Subject меняется, он вызывает метод уведомления (например, notifyObservers), который перебирает всех зарегистрированных наблюдателей и вызывает у них метод обновления (update). Таким образом, все подписчики получают актуальную информацию и могут реагировать на изменения.

Пример на Kotlin для Android:

interface Observer {
    fun update(data: String)
}

class Subject {
    private val observers = mutableListOf<Observer>()
    private var state: String = ""

    fun registerObserver(observer: Observer) {
        observers.add(observer)
    }

    fun unregisterObserver(observer: Observer) {
        observers.remove(observer)
    }

    fun setState(newState: String) {
        state = newState
        notifyObservers()
    }

    private fun notifyObservers() {
        for (observer in observers) {
            observer.update(state)
        }
    }
}

Таким образом, паттерн обеспечивает слабую связанность между объектами и удобен для реализации событийных систем.