¿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:
-
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
.
-
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;
}
}
const singleton1 = Singleton.getInstance("versión1");
const singleton2 = Singleton.getInstance("versión2");
console.log(singleton1 === singleton2);
¿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:
- Verificación: Se comprueba si
Singleton.instance
está definida. Si no lo está, se crea una nueva instancia.
- Asignación: La nueva instancia se asigna a
Singleton.instance
.
- 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:
const singleton3 = Singleton.getInstance("versión3");
console.log(singleton1 === singleton3);
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.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?