Назад к вопросам
Middle
71
questionbank

Что такое фасад (Facade) в контексте программирования и как он используется?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Паттерн проектирования, предоставляющий унифицированный интерфейс к набору интерфейсов в подсистеме. Он определяет высокоуровневый интерфейс, делающий подсистему проще в использовании.

Использование:

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

Пример:

# Подсистема
class Amplifier:
    def on(self):
        print("Amplifier on")

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

    def set_volume(self, volume):
        print(f"Amplifier volume set to {volume}")

class Tuner:
    def on(self):
        print("Tuner on")

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

    def set_frequency(self, frequency):
        print(f"Tuner frequency set to {frequency}")

# Фасад
class HomeTheaterFacade:
    def __init__(self, amp, tuner):
        self._amplifier = amp
        self._tuner = tuner

    def watch_movie(self, movie):
        print("Get ready to watch a movie...")
        self._amplifier.on()
        self._amplifier.set_volume(5)
        self._tuner.off() # Предположим, тюнер не нужен для фильма

    def end_movie(self):
        print("Shutting down home theater...")
        self._amplifier.off()
        self._tuner.off()

# Клиентский код
# amp = Amplifier()
# tuner = Tuner()
# home_theater = HomeTheaterFacade(amp, tuner)
# home_theater.watch_movie("Inception")
# home_theater.end_movie()