Diagrama de Clases del Patrón Singleton en JavaScript

Clase 4 de 27Curso de Patrones de Diseño en JavaScript

Resumen

¿Qué es el diagrama de clases del patrón Singleton?

El patrón Singleton es un diseño en programación orientada a objetos que asegura que una clase solo tenga una instancia y proporciona un punto de acceso global. El diagrama de clases de Singleton nos presenta una representación gráfica que resume la estructura y comportamiento de este patrón. Dos aspectos destacados del diagrama son cruciales para su comprensión:

  1. Constructor privado: El constructor de la clase se establece como privado. Esto se representa con un símbolo de menos (-), indicando que no puede ser accesible fuera de la propia clase. Este paso garantiza que no se pueden crear nuevas instancias de la clase utilizando el operador new.

  2. Método estático getInstance(): Se crea un método estático que internamente llama al constructor privado. Este método es el que guarda la instancia en una variable estática y devuelve la misma instancia cada vez que se solicita.

¿Cómo se implementa el patrón Singleton en código?

La implementación en código del patrón Singleton suele seguir un proceso conocido y eficiente, que permite ahorrar recursos y asegurar la invariabilidad de la instancia. La traducción del diagrama a JavaScript ofrece una visión clara de cómo establecer el patrón, incluso cuando este lenguaje no soporta modificadores de acceso como private. El código es el siguiente:

class Singleton {
    constructor(version) {
        this.version = version;
    }
    
    static getInstance(version) {
        if (!Singleton.instance) {
            Singleton.instance = new Singleton(version);
        }
        return Singleton.instance;
    }
}

// Prueba del patrón Singleton
const singleton1 = Singleton.getInstance("versión1");
const singleton2 = Singleton.getInstance("versión2");

console.log(singleton1 === singleton2); // Output: true

¿Cómo se realiza la verificación de instancia?

El método estático getInstance() verifica si ya existe una instancia de la clase Singleton. Si no existe, crea una nueva instancia, la almacena, y la devuelve. Si ya existe, simplemente retorna la instancia existente:

  1. Verificación: Se comprueba si Singleton.instance está definida. Si no lo está, se crea una nueva instancia.
  2. Asignación: La nueva instancia se asigna a Singleton.instance.
  3. Retorno: Se devuelve siempre Singleton.instance.

Este proceso garantiza que solo haya una única instancia activa a lo largo de toda la aplicación.

¿Cuál es el resultado al probar el patrón Singleton?

Al correr una prueba con varias llamadas a getInstance() y diferentes versiones, como se hace en el ejemplo anterior con singleton1 y singleton2, el resultado es crucial para validar el patrón. El código devuelve true, lo que significa que ambas variables apuntan a la misma instancia, cumpliendo así con el objetivo del patrón Singleton. A continuación se muestra un fragmento que refleja el testeo y su interpretación:

// Verificación adicional
const singleton3 = Singleton.getInstance("versión3");

console.log(singleton1 === singleton3); // Output: true

La prueba establece que no importa con qué versión se invoca el método getInstance(), siempre se retorna la misma instancia única. Esto demuestra la efectividad y fiabilidad del patrón Singleton. Como desarrollador, ahora tienes una herramienta poderosa para controlar y gestionar los estados globales en tus aplicaciones.