Middle
¿Qué es el patrón fachada (Facade)?
sobes.tech AI
Respuesta de la IA
El patrón "Fachada" (Facade) es un patrón de diseño estructural que proporciona una interfaz simplificada a un sistema complejo de clases, biblioteca o subsistema. Oculta los detalles de implementación del subsistema y proporciona un único punto de entrada para realizar operaciones típicas.
Objetivo:
- Simplificar el uso de un sistema complejo.
- Reducir las dependencias entre el cliente y el subsistema.
- Hacer que el subsistema sea más flexible ante cambios.
Estructura:
- Fachada (Facade): Proporciona una interfaz sencilla para el cliente. Delegates requests to the appropriate subsystem objects.
- Clases del subsistema: Implementan la funcionalidad del subsistema. No están conscientes de la Fachada.
Ejemplo en Python:
# Clases del subsistema complejo
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 volumen a {level}...")
class VideoRenderer:
def __init__(self):
print("VideoRenderer: Inicializando...")
def set_resolution(self, res):
print(f"VideoRenderer: Ajustando resolución a {res}...")
def render(self, frame):
print(f"VideoRenderer: Renderizando cuadro {frame}...")
class SubtitleManager:
def __init__(self):
print("SubtitleManager: Inicializando...")
def load(self, file):
print(f"SubtitleManager: Cargando subtítulos desde {file}...")
def sync(self):
print("SubtitleManager: Sincronizando subtítulos...")
# Patrón 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 conversión de video...")
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): # Simulación de procesamiento de cuadros
self._video_renderer.render(i)
self._audio_mixer.set_volume(5)
print("VideoConverterFacade: Conversión de video finalizada.\n")
# Código cliente
# Sin la Fachada, el cliente tendría que interactuar
# directamente con todas las clases del subsistema.
# mixer = AudioMixer()
# renderer = VideoRenderer()
# subtitles = SubtitleManager()
# ... muchas líneas de código para interactuar ...
# Con la Fachada, el cliente solo interactúa con la Fachada
facade = VideoConverterFacade()
facade.convert_video("mi_pelicula")
Cuándo usar:
- Cuando necesitas proporcionar una interfaz sencilla a un sistema complejo.
- Cuando hay muchas dependencias entre los clientes y las clases del subsistema.
- Para dividir el subsistema en capas.
Ventajas:
- Simplifica la interacción con el subsistema.
- Reduce el acoplamiento entre el cliente y el subsistema.
- Facilita el cambio o reemplazo del subsistema.
Desventajas:
- La Fachada puede convertirse en un "objeto divino" (God Object) si incluye demasiada funcionalidad.
- Puede ocultar detalles importantes que podrían ser necesarios para usuarios avanzados del subsistema.
En general, la Fachada es una forma conveniente de organizar el código y mejorar la legibilidad y facilidad de uso de sistemas complejos.