Что это такое
Паттерн Фасад (Facade) ставит одну простую дверь перед сложной подсистемой. За дверью несколько частей работают вместе в правильном порядке; перед ней вызывающий код делает один вызов.
Подсистема остаётся полностью доступной для тех, кому нужны детали, — фасад служит удобством, а не стеной.
Пример: один вызов начинает день
Обогреватель, свет, кофемашина — три части, у каждой свой API и свой правильный порядок. start_day() прячет всю последовательность действий за одним вызовом.
Одна простая дверь
Вызывающий код пишет одну строку; фасад знает порядок (сначала обогрев, кофе в конце). Если распорядок меняется, меняется только фасад.
Вывод: полная программа на Python
class Heater:
def on(self):
print("обогреватель: нагрев до 21 градуса")
class Lights:
def on(self):
print("свет: включён на 40%")
class CoffeeMachine:
def brew(self):
print("кофе: варится эспрессо")
# Фасад: одна простая дверь ко всей подсистеме.
class House:
def __init__(self):
self.heater = Heater()
self.lights = Lights()
self.coffee = CoffeeMachine()
def start_day(self):
self.heater.on()
self.lights.on()
self.coffee.brew()
House().start_day()
Когда его использовать
Используйте его, когда вызывающий код снова и снова повторяет одну и ту же многошаговую последовательность действий с подсистемой или когда нужно предоставить небольшой стабильный интерфейс поверх запутанного или меняющегося.
Не используйте его, когда «подсистема» — это один класс с тремя методами. Фасад над тем, что и так просто, только добавляет лишний уровень.
Плюсы и минусы
Плюсы: вызывающий код получает один простой вызов; правильный порядок хранится ровно в одном месте; подсистема может меняться за стабильным фасадом.
Минусы: фасады склонны разрастаться в классы, которые делают всё; фасад, который скрывает слишком много, вынуждает обходить его.