Middle
O que é o padrão fachada (Facade)?
sobes.tech IA
Resposta da IA
O padrão "Fachada" (Facade) é um padrão de design estrutural que fornece uma interface simplificada a um sistema complexo de classes, biblioteca ou subsistema. Esconde os detalhes de implementação do subsistema e fornece um único ponto de entrada para realizar operações típicas.
Objetivo:
- Simplificar o uso de um sistema complexo.
- Reduzir as dependências entre o cliente e o subsistema.
- Tornar o subsistema mais flexível às mudanças.
Estrutura:
- Fachada (Facade): Fornece uma interface simples para o cliente. Delegates requests to the appropriate subsystem objects.
- Classes do subsistema: Implementam a funcionalidade do subsistema. Não estão conscientes da Fachada.
Exemplo em Python:
# Classes do subsistema complexo
class AudioMixer:
def __init__(self):
print("AudioMixer: Inicializando...")
def configure(self, type):
print(f"AudioMixer: Configurando para {type}...")
def set_volume(self, level):
print(f"AudioMixer: Ajustando volume para {level}...")
class VideoRenderer:
def __init__(self):
print("VideoRenderer: Inicializando...")
def set_resolution(self, res):
print(f"VideoRenderer: Ajustando resolução para {res}...")
def render(self, frame):
print(f"VideoRenderer: Renderizando quadro {frame}...")
class SubtitleManager:
def __init__(self):
print("SubtitleManager: Inicializando...")
def load(self, file):
print(f"SubtitleManager: Carregando legendas de {file}...")
def sync(self):
print("SubtitleManager: Sincronizando legendas...")
# Padrão Fachada
class VideoConverterFacade:
def __init__(self):
self._audio_mixer = AudioMixer()
self._video_renderer = VideoRenderer()
self._subtitle_manager = SubtitleManager()
def convert_video(self, filename):
print("\nVideoConverterFacade: Iniciando conversão de vídeo...")
self._audio_mixer.configure("estéreo")
self._video_renderer.set_resolution("1080p")
self._subtitle_manager.load(f"{filename}.srt")
self._subtitle_manager.sync()
for i in range(3): # Simulação do processamento de quadros
self._video_renderer.render(i)
self._audio_mixer.set_volume(5)
print("VideoConverterFacade: Conversão de vídeo concluída.\n")
# Código cliente
# Sem a Fachada, o cliente teria que interagir
# diretamente com todas as classes do subsistema.
# mixer = AudioMixer()
# renderer = VideoRenderer()
# subtitles = SubtitleManager()
# ... muitas linhas de código para interação ...
# Com a Fachada, o cliente interage apenas com a Fachada
facade = VideoConverterFacade()
facade.convert_video("meu_filme")
Quando usar:
- Quando precisar fornecer uma interface simples a um subsistema complexo.
- Quando há muitas dependências entre clientes e classes do subsistema.
- Para dividir o subsistema em camadas.
Vantagens:
- Simplifica a interação com o subsistema.
- Reduz o acoplamento entre cliente e subsistema.
- Facilita a mudança ou substituição do subsistema.
Desvantagens:
- A Fachada pode se tornar um "objeto divino" (God Object) se incluir muita funcionalidade.
- Pode esconder detalhes importantes que podem ser necessários para usuários avançados do subsistema.
No geral, a Fachada é uma maneira conveniente de organizar o código e melhorar a legibilidade e facilidade de uso de sistemas complexos.