Перейти к основному содержимому

Что это такое

Паттерн Facade ставит одну простую дверь перед сложной подсистемой. За дверью несколько частей работают вместе в правильном порядке; перед дверью вызывающий код делает один вызов.

Подсистема остаётся полностью доступной для тех, кому нужны детали: фасад — это удобство, а не стена.


Пример: один вызов начинает день

Обогреватель, свет, кофемашина — три части, у каждой свой метод и своё место в порядке. startDay() прячет всю эту хореографию за одним вызовом.

Одна простая дверь

Вызывающий код пишет одну строку, new House().startDay(); фасад знает порядок (сначала тепло, кофе в конце). Если распорядок изменится, изменится только фасад.

Prompt
Напишите программу на TypeScript, показывающую паттерн Facade: классы Heater, Lights и CoffeeMachine, каждый из которых печатает своё действие, и класс-фасад House, чей метод startDay запускает их в правильном порядке. Начните день одним-единственным вызовом.
Вывод: программа на TypeScript и захваченный вывод

Когда его использовать

Используйте его, когда вызывающий код снова и снова повторяет один и тот же многошаговый танец с подсистемой, или когда вы хотите показать небольшую стабильную поверхность поверх запутанной или меняющейся.

Не используйте его, когда «подсистема» — это один класс с тремя методами. Фасад поверх того, что и так просто, лишь добавляет расстояние.


Плюсы и минусы

Плюсы: вызывающий код получает один простой вызов; правильный порядок живёт ровно в одном месте; подсистема может меняться за стабильным фасадом.

Минусы: фасады склонны разрастаться в классы «на все случаи жизни»; фасад, который прячет слишком много, подталкивает людей обходить его стороной.