Что это
Паттерн Фасад ставит одну простую дверь перед сложной подсистемой. За дверью несколько частей взаимодействуют в правильном порядке; перед ней вызывающий код делает один вызов.
Подсистема остаётся полностью доступной тем, кому нужны детали, — фасад это удобство, а не стена.
Пример: один вызов начинает день
Обогреватель, свет, кофемашина — три части, у каждой свой API и свой правильный порядок. startDay() скрывает всю эту хореографию за одним вызовом.
Одна простая дверь
Вызывающий код пишет одну строку; фасад знает порядок (сначала обогрев, кофе последним). Если распорядок меняется, меняется только фасад.
Вывод: PHP-скрипт
<?php
class Heater {
public function on(): void {
echo "обогреватель: греем до 21 градуса\n";
}
}
class Lights {
public function on(): void {
echo "свет: включён на 40%\n";
}
}
class CoffeeMachine {
public function brew(): void {
echo "кофе: варим эспрессо\n";
}
}
// Фасад: одна простая дверь ко всей подсистеме.
class House {
public function __construct(
private Heater $heater = new Heater(),
private Lights $lights = new Lights(),
private CoffeeMachine $coffee = new CoffeeMachine(),
) {}
public function startDay(): void {
$this->heater->on();
$this->lights->on();
$this->coffee->brew();
}
}
(new House())->startDay();
Когда его применять
Применяйте, когда вызывающий код снова и снова повторяет один и тот же многошаговый танец с подсистемой или когда нужно выставить наружу небольшую стабильную поверхность поверх запутанной или меняющейся.
Не применяйте, когда «подсистема» — это один класс с тремя методами. Фасад над тем, что и без него простое, лишь добавляет расстояние.
Плюсы и минусы
Плюсы: вызывающий код получает один простой вызов; правильный порядок живёт ровно в одном месте; подсистема может меняться за стабильным фронтом.
Минусы: фасады склонны разрастаться в классы «на все случаи жизни»; фасад, который скрывает слишком много, побуждает людей обходить его.