Ответ
Decorator динамически добавляет новую функциональность объекту, не изменяя его структуру. Используется для расширения поведения.
Facade предоставляет упрощенный интерфейс к сложной системе, скрывая детали реализации.
Пример Decorator (Kotlin):
interface Coffee { fun cost(): Int }
class SimpleCoffee : Coffee { override fun cost() = 10 }
class MilkDecorator(private val coffee: Coffee) : Coffee {
override fun cost() = coffee.cost() + 5
}
Пример Facade (Kotlin):
class ComplexSystem {
fun operation1() { /* сложная логика */ }
fun operation2() { /* сложная логика */ }
}
class Facade(private val system: ComplexSystem) {
fun simplifiedOperation() {
system.operation1()
system.operation2()
}
}
Decorator — расширяет функциональность, Facade — упрощает взаимодействие.