Фасад — простой интерфейс перед сложной подсистемой. Вместо того чтобы знать множество классов и правильный порядок вызовов, клиент вызывает один-два высокоуровневых метода. Подсистема не меняется; фасад лишь координирует её.

Проблема: много частей и фиксированный порядок

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

python
class Lights:
    def dim(self, level):
        print(f"lights {level}%")

class Projector:
    def on(self):
        print("projector on")

    def off(self):
        print("projector off")

class Amp:
    def on(self):
        print("amp on")

    def off(self):
        print("amp off")

    def volume(self, v):
        print(f"amp volume {v}")

class Player:
    def play(self, movie):
        print(f"playing {movie}")

    def stop(self):
        print("player stopped")

lights, projector, amp, player = Lights(), Projector(), Amp(), Player()

lights.dim(10)               # the client must know all steps and their order
projector.on()
amp.on()
amp.volume(7)
player.play("Dune")
text
lights 10%
projector on
amp on
amp volume 7
playing Dune

Класс-фасад

`Client` вызывает `HomeTheater`, который координирует четыре класса устройств
Client вызывает HomeTheater, который координирует четыре класса устройств