Ответ
Фасад (Facade) — это структурный паттерн проектирования, который предоставляет простой, унифицированный интерфейс к сложной подсистеме, состоящей из множества классов, библиотек или фреймворков.
Он скрывает внутреннюю сложность и делает взаимодействие с подсистемой более удобным, выступая в роли единой "точки входа".
Ключевая идея: Вместо того чтобы клиентский код напрямую взаимодействовал с десятками классов сложной системы, он обращается к одному объекту-фасаду, который делегирует вызовы нужным компонентам.
Пример на Python:
Представим сложную систему запуска компьютера, включающую процессор, память и жесткий диск. Фасад Computer
упрощает эту операцию до одного метода start()
.
# 1. Сложная подсистема
class CPU:
def freeze(self):
print("CPU: Freezing...")
def jump(self, position):
print(f"CPU: Jumping to {position}...")
def execute(self):
print("CPU: Executing...")
class Memory:
def load(self, position, data):
print(f"Memory: Loading data '{data}' to {position}...")
class HardDrive:
def read(self, lba, size):
print(f"HardDrive: Reading {size} bytes from LBA {lba}...")
return "boot_data"
# 2. Фасад
class Computer:
def __init__(self):
self.cpu = CPU()
self.memory = Memory()
self.hard_drive = HardDrive()
def start(self):
print("Computer: Starting...")
self.cpu.freeze()
boot_address = 0
boot_data = self.hard_drive.read(lba=0, size=1024)
self.memory.load(boot_address, boot_data)
self.cpu.jump(boot_address)
self.cpu.execute()
print("Computer: Started successfully.")
# 3. Клиентский код
computer_facade = Computer()
computer_facade.start() # Клиенту нужен всего один вызов
Преимущества:
- Изоляция сложности: Клиентский код не зависит от сложной внутренней реализации подсистемы.
- Слабая связанность: Уменьшает количество зависимостей между клиентом и подсистемой.
- Упрощение использования: Предоставляет простой и понятный API.
Недостатки:
- Фасад может стать "божественным объектом", если он берет на себя слишком много ответственности и привязан ко всем классам системы.