Facade

El patrón Facade es un patrón de diseño estructural que proporciona una interfaz unificada y simplificada a un conjunto de interfaces más complejas de un subsistema. Esto permite a los clientes interactuar con el sistema de una manera más fácil y comprensible, sin necesidad de conocer los detalles de implementación del subsistema.

Un ejemplo común del patrón Facade es el uso de una interfaz de usuario (UI) en una aplicación web. La UI puede ser una fachada que proporciona una interfaz simplificada para interactuar con un conjunto complejo de servicios, como autenticación, almacenamiento de datos y procesamiento de datos. En lugar de que los clientes interactúen directamente con cada uno de estos servicios de forma individual, pueden interactuar con la UI, que se encarga de coordinar las solicitudes y manejar la comunicación con los servicios subyacentes.

Aquí tienes un ejemplo más concreto en TypeScript que ilustra cómo implementar el patrón Facade:

typescriptCopy code// Subsistema 1
class Authentication {
  login(username: string, password: string): boolean {
    // Lógica de autenticación
    return true; // Supongamos que la autenticación siempre es exitosa para este ejemplo
  }

  logout(): void {
    // Lógica de cierre de sesión
  }
}

// Subsistema 2
class DataStorage {
  saveData(data: any): void {
    // Lógica para guardar datos
  }

  getData(): any {
    // Lógica para obtener datos
    return null;
  }
}

// Facade
class SystemFacade {
  private authentication: Authentication;
  private dataStorage: DataStorage;

  constructor() {
    this.authentication = new Authentication();
    this.dataStorage = new DataStorage();
  }

  // Métodos simplificados para el cliente
  login(username: string, password: string): void {
    if (this.authentication.login(username, password)) {
      console.log('Login successful');
    } else {
      console.log('Login failed');
    }
  }

  logout(): void {
    this.authentication.logout();
    console.log('Logout successful');
  }

  saveData(data: any): void {
    this.dataStorage.saveData(data);
    console.log('Data saved successfully');
  }

  getData(): any {
    const data = this.dataStorage.getData();
    console.log('Data retrieved successfully');
    return data;
  }
}

// Uso
const facade = new SystemFacade();

facade.login('user123', 'password123');
facade.saveData({ id: 1, name: 'John Doe' });
const data = facade.getData();
facade.logout();

En este ejemplo, SystemFacade actúa como una fachada que proporciona una interfaz simplificada para interactuar con los subsistemas de autenticación y almacenamiento de datos. Los clientes pueden utilizar los métodos proporcionados por SystemFacade para realizar acciones como iniciar sesión, guardar datos y recuperar datos, sin necesidad de conocer los detalles de implementación de los subsistemas subyacentes. Esto simplifica la interacción con el sistema y oculta la complejidad interna del mismo.

Last updated