# Propósito
El patrón Facade (Fachada) proporciona una interfaz unificada y simplificada a un conjunto de interfaces en un subsistema.
Facilita el uso a los clientes de sistemas grandes y complejos.
# Problema
La complejidad asociada a sistemas con múltiples componentes interdependientes o subsistemas con interfaces propias.
Estos sistemas son difíciles de entender, generan acoplamiento y dificultan los cambios.
# Solución
La solución que propone el Facade es:
-
Interfaz Unificada: Simplifica la interacción con el subsistema.
-
Reducción del Acoplamiento: Los clientes no necesitan conocer los detalles internos.
# Estructura
# Participantes
- Facade: Delega peticiones a los objetos apropiados del subsistema.
- Subsystems Class: Implementa la funcionalidad del subsistema.
- Client: Accede al subsistema a través del Facade.
# Cuándo Usarlo
-
Proporcionar una interfaz simple a un subsistema complejo.
-
Cuando hay muchas dependencias entre clientes y clases de implementación.
# Ventajas
-
verified
Simplicidad: Facilita el uso del subsistema.
-
verified
Abstracción: Oculta la complejidad interna.
-
verified
Desacoplamiento: Reduce dependencias directas.
# Desventajas
-
warning
Riesgo Objeto Dios: Demasiada funcionalidad en una sola clase.
-
warning
Limitaciones: Puede ocultar características avanzadas necesarias.
# Ejemplo: Home Theater
Estamos desarrollando un sistema integrado que consta de TV, DVD/BluRay, Sonido Envolvente, etc. Cada uno con su propia interfaz.
# Código Java
class HomeTheaterFacade {
private Television tv;
private SoundSystem sound;
private BluRayPlayer bluRay;
public void watchMovie() {
tv.turnOn();
sound.turnOn();
bluRay.turnOn();
bluRay.play();
}
}
public class Client {
public static void main(String[] args) {
HomeTheaterFacade facade = new HomeTheaterFacade(tv, sound, bluRay);
facade.watchMovie();
}
}
# Mapeo Participantes
- Television, Sound, BluRay (Subsystems): Clases internas.
- HomeTheaterFacade (Facade): Interfaz simplificada.
- Client: Usa el Facade.
# Conclusiones
El patrón Facade simplifica mucho la interacción del usuario. Si agregamos otro dispositivo, solo hay que modificar el Facade sin afectar a los clientes.
# Patrones relacionados
Abstract Factory
Pueden usarse con Facade para construir subsistemas.
Singleton
A veces el Facade se implementa como un Singleton.
Mediator
Abstrae funcionalidad de clases existentes, pero centraliza la comunicación.