El patrón Singleton
- In Design Patterns
- by fixture-author
- Published
- Reading time
Descripción
El Singleton Pattern (patrón Singleton) es un patrón de diseño creacional que se utiliza para garantizar que una clase tenga una única instancia y proporcionar un punto de acceso global a dicha instancia. En otras palabras, el Singleton asegura que solo haya una única instancia de una clase en todo el programa y proporciona un mecanismo para acceder a esta instancia desde cualquier parte del código.
Características del Singleton Pattern
- Única Instancia: Garantiza que solo haya una instancia de la clase Singleton en el sistema.
- Acceso Global: Proporciona un método para acceder a la instancia única desde cualquier parte del código.
- Inicialización Única: La instancia Singleton se crea una sola vez, normalmente en el momento de la primera llamada a su método de obtención.
Implementación del Singleton Pattern en JavaScript
En JavaScript, podemos implementar el Singleton de varias maneras. A continuación, se muestra una implementación básica utilizando una función constructora:
let Singleton = (function () { let instance; // Variable privada que almacenará la única instancia function createInstance() { // Función privada para crear la instancia única let object = new Object("I am the instance"); return object; } return { getInstance: function () { // Función pública para obtener la instancia única if (!instance) { instance = createInstance(); } return instance; }, };})();// Uso del Singletonlet instance1 = Singleton.getInstance();let instance2 = Singleton.getInstance();console.log(instance1 === instance2); // true, ambas variables apuntan a la misma instancia
Explicación de la Implementación
- Closure: Utilizamos una función autoejecutable (IIFE, por sus siglas en inglés Immediately Invoked Function Expression) para encapsular el Singleton y mantener la instancia privada dentro del ámbito de esta función.
- Variable
instance
: Es una variable privada que almacenará la única instancia de la clase Singleton. - Función
createInstance
: Es una función privada que crea la instancia única del Singleton cuando sea necesario. - Método
getInstance
: Es el método público que proporciona acceso a la instancia única del Singleton. Si la instancia aún no existe, se crea llamando acreateInstance()
, de lo contrario, simplemente devuelve la instancia existente.
Ventajas del Singleton Pattern
- Control sobre la Instancia Única: Garantiza que solo exista una única instancia de la clase, evitando la creación repetida de objetos idénticos.
- Acceso Global: Proporciona un punto de acceso global a la instancia única, facilitando la gestión de recursos compartidos o configuraciones globales.
Consideraciones y Desventajas
- Acoplamiento Fuerte: Puede introducir un acoplamiento fuerte en el código, ya que el Singleton es accesible globalmente y puede ser utilizado en múltiples partes de la aplicación.
- Dificultad en Pruebas Unitarias: Puede ser difícil realizar pruebas unitarias debido a la dependencia de la instancia única en diferentes partes del código.
- Problemas de Concurrencia: Si no se maneja adecuadamente, puede haber problemas de concurrencia en entornos multi-hilo, aunque JavaScript es de un solo hilo y no tiene multitarea real.
Cuándo Usar el Singleton Pattern
El Singleton es útil cuando:
- Necesitas tener exactamente una instancia de una clase en toda la aplicación.
- Quieres controlar el acceso a una única instancia de un recurso compartido.
- La inicialización de la instancia es costosa y deseas evitar recreaciones innecesarias.
Conclusión
En resumen, el Singleton Pattern es una herramienta poderosa en el diseño de software que garantiza la creación de una única instancia de una clase y proporciona un acceso global a esta instancia. Sin embargo, debe usarse con precaución para evitar problemas potenciales relacionados con el acoplamiento y la gestión de la concurrencia.