Back to questions
Альфа-Банк
Junior — Middle
63
Объясните различие между паттернами Decorator и Facade, их назначение и случаи использования.
Companies where asked
Answer from AI
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()
}
}