Middle
263
O que é o padrão Fachada (Facade)?
Resposta da IA
sobes.tech IA
O padrão Facade é um padrão de design estrutural que fornece uma interface simples para um sistema complexo de classes, frameworks ou um conjunto de funções.
Objetivos principais:
- Simplificar o uso de sistemas complexos.
- Reduzir o acoplamento entre o cliente e o subsistema.
- Tornar o código mais legível e fácil de manter.
Princípio de funcionamento:
O facade oculta a complexidade do subsistema, redirecionando as chamadas do cliente para os objetos apropriados dentro do subsistema. O cliente interage apenas com o facade, sem conhecer os detalhes de implementação dos componentes internos.
Exemplo:
# Subsistema: classes que representam componentes de um sistema complexo
class Amplificador:
def on(self):
print("Amplificador ligado")
def off(self):
print("Amplificador desligado")
def set_volume(self, level):
print(f"Volume do amplificador definido para {level}")
def set_source(self, source):
print(f"Fonte do amplificador definida para {source}")
class Tuner:
def on(self):
print("Tuner ligado")
def off(self):
print("Tuner desligado")
def set_am(self):
print("Tuner configurado para AM")
def set_fm(self):
print("Tuner configurado para FM")
def set_frequency(self, frequency):
print(f"Frequência do Tuner definida para {frequency}")
class DvdPlayer:
def on(self):
print("Reprodutor de DVD ligado")
def off(self):
print("Reprodutor de DVD desligado")
def play(self, movie):
print(f"Reproduzindo filme: {movie}")
# Padrão Facade: fornece uma interface simples ao subsistema
class HomeTheaterFacade:
def __init__(self, amp, tuner, dvd):
self.amp = amp
self.tuner = tuner
self.dvd = dvd
def watch_movie(self, movie):
print("Preparando para assistir a um filme...")
self.dvd.on()
self.amp.on()
self.amp.set_source("DVD")
self.amp.set_volume(5)
self.dvd.play(movie)
def end_movie(self):
print("Desligando o home theater...")
self.dvd.off()
self.amp.off()
# Uso do facade pelo cliente
if __name__ == "__main__":
amplificador = Amplificador()
tuner = Tuner()
dvd_player = DvdPlayer()
home_theater = HomeTheaterFacade(amplificador, tuner, dvd_player)
home_theater.watch_movie("Raiders of the Lost Ark")
print("-" * 20)
home_theater.end_movie()
Vantagens:
- Simplificação: Esconde a complexidade do subsistema.
- Redução do acoplamento: O cliente não depende diretamente de várias classes do subsistema.
- Melhoria na legibilidade: O código do cliente torna-se mais compreensível.
- Manutenção mais fácil: Mudanças internas no subsistema têm menor probabilidade de afetar o código do cliente.
Desvantagens:
- Potencial crescimento: Se o facade ficar muito grande, pode tornar-se "grosso" e difícil de gerenciar.
- Limitação de flexibilidade: O facade fornece um conjunto predefinido de operações. O acesso direto ao subsistema pode ser necessário para cenários mais flexíveis.
Aplicabilidade:
Usado quando é necessário fornecer uma maneira simples e unificada de interagir com um sistema complexo composto por múltiplos objetos interconectados.