Patrones de Diseño: Singleton


¿En qué consiste?

La idea principal es garantizar que sólo se generará y utilizará un único objeto la aplicación.

¿Cuándo utilizarlo?

  • Un objeto que debe ser único en toda la aplicación.
  • Cuando la creación de un nuevo objeto no genera diferencia alguna si se utiliza el mismo objeto creado por otra instancia.
  • Se quiere garantizar que el valor asignado al objeto sea el mismo desde distintas partes del código
  • La creación del mismo objeto es demasiado frecuente y puede causar un aumento drástico de consumo de memoria.

Ejemplos de uso

  • Generar conexiones a bases de datos.
  • Obtención de un valor constante para toda la aplicación y queremos evitar el consumo de memoria al crearlo multiples veces.
  • Geremos garantizar que las operaciones se realicen sobre un único objeto y no copias de él.

¿Cómo generarlo?

La clave está en crear un método static y añadir una condición en dicho método que revise si el objeto ya ha sido generado

Revisa los comentarios en la siguiente clase

class DBInstance {
  // 1.- crea un attributo 'static' para la instancia 
  private static _instance: DBClient; // Definir una variable privada para la instacia del objeto.

  //parámetos de conexión
  private static _URL: string;
  private static _USER: string; 
  private static _PASS: string;

  // 2.- Crea un método 'static' para que no tener que utilizar 'new' 
  // y crear un objeto distinto para cada llamado.
  static getDocClient(): DBClient {
    // 3.- Condición if para asegurar que no se vuelva a crear.
    if (!this._instance) {
      this._instance = new DBClient.connect({
        url: this._URL,
        user: this._USER,
        pass: this._PASS,
      });
    }
    return this._instance;
  }
}

export { DBInstance };