terminal

codeando_simple

terminal

menu

terminal

search_module

guest@codeandosimple: ~/system/search $ grep -r "" .

Press [ENTER] to execute search

Status

Engine: Ready

Database: Online

Index: V2.1.0_LATEST

bash — cat facade.md
guest@codeandosimple: ~/blog/design-patterns $ cat facade.md

Patrón Facade_

// "Nada debe ser temido, solo debe ser entendido. Ahora es el momento de entender más, para que podamos temer menos" - Marie Curie

# 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.

Sin Facade Con Facade

# 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

Estructura UML Facade

# 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.

Ejemplo Facade Home Theater

# 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.