Что такое паттерн Observer

«Что такое паттерн Observer» — вопрос из категории Паттерны, который задают на 26% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Основные компоненты:

  • Subject (издатель) — хранит список подписчиков, умеет добавлять/удалять их и оповещать о событиях.
  • Observer (подписчик) — интерфейс с методом update(), который вызывается при изменении состояния издателя.

Пример на Kotlin:

interface Observer {
    fun update(data: String)
}

class Subject {
    private val observers = mutableListOf<Observer>()

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

    fun notifyObservers(data: String) {
        observers.forEach { it.update(data) }
    }
}

class ConcreteObserver : Observer {
    override fun update(data: String) {
        println("Received: $data")
    }
}

Использование:

val subject = Subject()
subject.addObserver(ConcreteObserver())
subject.notifyObservers("Hello!") // Выведет: "Received: Hello!"

Где применяется: LiveData, RxJava, BroadcastReceiver.