Decorator и Facade — это структурные паттерны проектирования, но они решают разные задачи:
Объясните различие между паттернами Decorator и Facade, их назначение и случаи использования.
Decorator и Facade — это структурные паттерны проектирования, но они решают разные задачи:
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
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()
}
}