Приведи пример поведенческого паттерна

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

Ответ

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

interface Observer {
    fun update(data: String)
}

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

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

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

    private fun notifyObservers() {
        observers.forEach { it.update(state) }
    }
}

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

// Использование:
val subject = Subject()
val observer = ConcreteObserver()
subject.addObserver(observer)
subject.setState("New State") // Выведет: "Received update: New State"

Применение: уведомления UI о изменениях данных, события в EventBus, LiveData в Android.