- Implementación Básica
- Acceder al Singleton
- Añadiendo Métodos al Singleton
- Usando Closures para un Singleton
El patrón Singleton es un patrón de diseño que restringe la instancia de una clase a un único objeto. Es útil cuando necesitas exactamente una instancia de un objeto para coordinar acciones en todo el sistema.
Implementación Básica
El siguiente ejemplo muestra una implementación básica del patrón Singleton en JavaScript:
class Singleton {
constructor() {
if (Singleton.instance) {
return Singleton.instance;
}
Singleton.instance = this;
}
}
En este ejemplo, la intención es que cualquier instancia futura devuelta por el constructor sea la misma que la instancia original.
Acceder al Singleton
Para acceder a la única instancia del Singleton, simplemente se crea una nueva instancia utilizando el constructor:
const instance1 = new Singleton();
const instance2 = new Singleton();
console.log(instance1 === instance2); // true
La consola devolverá 'true' porque ambas variables hacen referencia a la misma instancia.
Añadiendo Métodos al Singleton
Podemos añadir métodos a nuestra clase Singleton:
class Singleton {
constructor() {
if (Singleton.instance) {
return Singleton.instance;
}
this.value = 0;
Singleton.instance = this;
}
getValue() {
return this.value;
}
setValue(value) {
this.value = value;
}
}
const instance1 = new Singleton();
instance1.setValue(42);
const instance2 = new Singleton();
console.log(instance2.getValue()); // 42
En este ejemplo, los métodos 'getValue' y 'setValue' pueden modificar y acceder al valor de la propiedad 'value', demostrando que todas las instancias del Singleton comparten el mismo estado.
Usando Closures para un Singleton
Otra forma popular de implementar el patrón Singleton en JavaScript es usando closures:
const Singleton = (function () {
let instance;
function createInstance() {
const object = new Object('I am the instance');
return object;
}
return {
getInstance: function () {
if (!instance) {
instance = createInstance();
}
return instance;
}
};
})();
const instance1 = Singleton.getInstance();
const instance2 = Singleton.getInstance();
console.log(instance1 === instance2); // true
En este ejemplo, 'getInstance' devuelve siempre la misma instancia, asegurando que sólo una instancia de la clase puede existir.
El patrón Singleton es una poderosa herramienta en el desarrollo de software que puede asegurar que una clase tenga solo una instancia a la vez. Conocer y entender cómo implementarlo puede ser muy beneficioso, especialmente para gestionar aplicaciones grandes y complejas.