Un patrón en el mundo de la programación es una solución estándar que confronta problemas recurrentes en nuestro código. Normalmente, los patrones solucionan problemas de arquitectura como acoplamientos y dependencias. En este post, te enseñaremos qué es y cómo funciona el patrón singleton o instancia única.
¿Qué es el patrón singleton?
El patrón singleton, también conocido en español como patrón de instancia única, es un patrón de diseño utilizado para manejar clases e instancias. Como te explicamos en nuestro post sobre clases e instancias en JavaScript, una clase es como un molde del que podemos sacar varias piezas, a las que llamamos instancias. Estas instancias usan el código original de la clase y lo adoptan. En este sentido, dos instancias de una misma clase no tienen nada que ver entre sí.
Para crear una nueva instancia de una clase, basta con agregar un new al nombre de clase. Esta instancia, además, puede guardarse dentro de una variable con las palabras clave let, var o const. Para aprender más sobre esto, te sugerimos leer nuestro post sobre crear clases en JavaScript.
const nuevaInstanciaClase = new Clase ( );
Entonces, ¿exactamente qué hace el patrón singleton? Lo que hace este patrón es ayudarnos a asegurar que todas las piezas de un proyecto usen una única instancia de una clase. Es decir, en vez de instanciar la clase en cada pieza que queramos que la utilice, guardamos una instancia y la llamamos directamente.
¿Cómo funciona el patrón singleton?
Para entender mejor el patrón singleton, te pondremos un ejemplo. Supongamos que tenemos la siguiente clase, que nos permite implementar el patrón PubSub en JavaScript:
class PubSub {
TOPICS = {
SHOW_ERROR_NOTIFICATION: “SHOW_ERROR_NOTIFICATION”,
};
constructor ( ) {
}
suscribe (topic, listener) {
}
publish (topic, info) {
}
Ahora, para hacer que todas nuestras piezas usen una única instancia de la clase PubSub, podemos guardar una instancia de la clase dentro de una variable. Luego, exportaremos esta variable para ser importada en otros módulos, en vez de importar la clase como tal. A continuación, te mostramos cómo exportamos e importamos esta instancia:
export const pubSub = new PubSub ( );
import {pubSub} from ./PubSub.js
Con la línea de código anterior, podemos importar directamente la instancia guardada dentro de la constante PubSub. Esto nos permitirá hacer que todas nuestras piezas trabajen sobre la misma instancia. Además, al guardarla como una constante, tendremos un único punto de acceso global a dicha instancia.
Además de crear una instancia de la clase a la que podemos acceder globalmente, el patrón singleton puede regular el acceso al constructor de una clase para asegurar que esta no pueda ser instanciada nuevamente. Esto nos permite, además de crear una instancia global, bloquear la posibilidad de crear una nueva, aunque sea por error.
Ten presente que este tipo de prácticas también tienen sus desventajas, pues pueden causar restricciones innecesarias en tu proyecto.
¿Por qué usar el patrón singleton?
Cuando usamos el patrón singleton, normalmente estamos buscando controlar el acceso a un recurso específico. Es decir, queremos controlar las instancias de una clase para, de este modo, controlar el acceso a bases de datos o archivos contenidos dentro de la clase. Entonces, todos los que quieran acceder a estos datos accederán a exactamente el mismo objeto o instancia, en vez de acceder a copias distintas de un mismo dato.
Otra razón para usar el patrón singleton es tener un control estricto de nuestras variables disponibles globalmente. En general, este patrón lo que nos permite es esto: ejercer control y restricciones sobre los datos que compartimos en nuestro proyecto.
Si todavía tienes dudas sobre cómo funciona el patrón singleton y por qué es importante en tus proyectos, te invitamos a leer el artículo singleton en refactoring.guru. Allí encontrarás un ejemplo con pseudocódigo para entender mejor la aplicabilidad de este patrón. Además, encontrarás ejemplos de este patrón con otros lenguajes distintos a JavaScript, como lo son C#, C++, PHP y Python.
¿Quieres seguir aprendiendo?
Tras leer este post sabes exactamente qué es y cómo funciona el patrón singleton. Sin embargo, ¡todavía queda mucho por aprender sobre el mundo del desarrollo web! Por ello, para dominar los patrones, lenguajes y herramientas fundamentales de este mundo, te invitamos a formar parte de nuestro Desarrollo Web Full Stack Bootcamp. ¿A qué esperas para cumplir tu sueño de ser un desarrollador web profesional? ¡Solicita información y descubre cómo impulsar tu carrera!