В чем разница между Decorator и Facade

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

Ответ

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 — упрощает взаимодействие.