Что это такое
Паттерн Facade ставит одну простую дверь перед сложной подсистемой. За дверью несколько частей работают вместе в правильном порядке; перед дверью вызывающий код делает один вызов.
Подсистема остаётся полностью доступной для тех, кому нужны детали: фасад — это удобство, а не стена.
Пример: один вызов начинает день
Обогреватель, свет, кофемашина — три части, у каждой свой метод и своё место в порядке. startDay() прячет всю эту хореографию за одним вызовом.
Одна простая дверь
Вызывающий код пишет одну строку, new House().startDay(); фасад знает порядок (сначала тепло, кофе в конце). Если распорядок изменится, изменится только фасад.
Вывод: программа на TypeScript и захваченный вывод
class Heater {
on(): void {
console.log("обогреватель: нагрев до 21 градуса")
}
}
class Lights {
on(): void {
console.log("свет: включён на 40%")
}
}
class CoffeeMachine {
brew(): void {
console.log("кофе: готовим эспрессо")
}
}
// Фасад: одна простая дверь ко всей подсистеме.
class House {
private heater = new Heater()
private lights = new Lights()
private coffee = new CoffeeMachine()
startDay(): void {
this.heater.on()
this.lights.on()
this.coffee.brew()
}
}
new House().startDay()
Когда его использовать
Используйте его, когда вызывающий код снова и снова повторяет один и тот же многошаговый танец с подсистемой, или когда вы хотите показать небольшую стабильную поверхность поверх запутанной или меняющейся.
Не используйте его, когда «подсистема» — это один класс с тремя методами. Фасад поверх того, что и так просто, лишь добавляет расстояние.
Плюсы и минусы
Плюсы: вызывающий код получает один простой вызов; правильный порядок живёт ровно в одном месте; подсистема может меняться за стабильным фасадом.
Минусы: фасады склонны разрастаться в классы «на все случаи жизни»; фасад, который прячет слишком много, подталкивает людей обходить его стороной.