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