Фасад — простой интерфейс перед сложной подсистемой. Вместо того чтобы знать множество классов и правильный порядок вызовов, клиент вызывает один-два высокоуровневых метода. Подсистема не меняется; фасад лишь координирует её.
Проблема: много частей и фиксированный порядок
Домашний кинотеатр состоит из света, проектора, усилителя и плеера. Для запуска фильма нужна определённая последовательность вызовов у всех четырёх. Без фасада каждый клиент повторяет её, и в любом повторении можно ошибиться в порядке.
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")lights 10%
projector on
amp on
amp volume 7
playing DuneКласс-фасад
Client вызывает HomeTheater, который координирует четыре класса устройств