Sobes.tech
Назад к вопросам
Junior — Middle
64

Объясните различие между паттернами Decorator и Facade, их назначение и случаи использования.

Компании, где спрашивали
Альфа-БанкАльфа-Банк

Ответ от нейросети

sobes.tech AI

Decorator и Facade — это структурные паттерны проектирования, но они решают разные задачи:

  • Decorator позволяет динамически добавлять объектам новые обязанности, оборачивая их в другие объекты-декораторы. Используется, когда нужно расширить функциональность без изменения исходного класса.

  • Facade предоставляет упрощённый интерфейс к сложной системе классов, скрывая внутреннюю сложность. Используется для удобства работы с подсистемами.

Пример:

  • Decorator: добавление логирования к существующему объекту без изменения его кода.
  • Facade: единый интерфейс для работы с несколькими сервисами (например, сеть, база данных, кеш).
// Decorator
interface Coffee { fun cost(): Double }
class SimpleCoffee : Coffee { override fun cost() = 2.0 }
class MilkDecorator(val coffee: Coffee) : Coffee {
    override fun cost() = coffee.cost() + 0.5
}

// Facade
class HomeTheaterFacade(val amp: Amplifier, val dvd: DvdPlayer) {
    fun watchMovie() {
        amp.on()
        dvd.play()
    }
}