Ответ
Поведенческие паттерны решают задачи эффективного взаимодействия объектов. Основные:
- 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) }
}
}
- Strategy — инкапсулирует алгоритмы, делая их взаимозаменяемыми:
interface SortingStrategy {
fun sort(list: List<Int>): List<Int>
}
class QuickSort : SortingStrategy { ... }
class BubbleSort : SortingStrategy { ... }
- Command — превращает запросы в объекты:
interface Command {
fun execute()
}
class LightOnCommand(val light: Light) : Command {
override fun execute() = light.turnOn()
}
Другие популярные: Chain of Responsibility, State, Visitor, Iterator, Mediator, Memento. Каждый решает конкретную задачу взаимодействия объектов.