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

Что это такое

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

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


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

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

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

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

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

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

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

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


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

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

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