Какие знаешь поведенческие паттерны проектирования

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

Ответ

Поведенческие паттерны решают задачи эффективного взаимодействия объектов. Основные:

  1. Observer — уведомляет подписчиков об изменениях. Пример:
interface Observer {
    fun update(data: Any)
}

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

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

    fun notifyObservers(data: Any) {
        observers.forEach { it.update(data) }
    }
}
  1. Strategy — инкапсулирует алгоритмы, делая их взаимозаменяемыми:
interface SortingStrategy {
    fun sort(list: List<Int>): List<Int>
}

class QuickSort : SortingStrategy { ... }
class BubbleSort : SortingStrategy { ... }
  1. Command — превращает запросы в объекты:
interface Command {
    fun execute()
}

class LightOnCommand(val light: Light) : Command {
    override fun execute() = light.turnOn()
}

Другие популярные: Chain of Responsibility, State, Visitor, Iterator, Mediator, Memento. Каждый решает конкретную задачу взаимодействия объектов.