Los Singletons son clases que solo pueden ser instanciadas una vez y pueden ser accedidas globalmente. Esta única instancia puede ser compartida en toda nuestra aplicación.
Singleton es un patrón de diseño creacional que nos permite asegurarnos de que una clase tenga una única instancia, a la vez que proporciona un punto de acceso global a dicha instancia.
El patron singleton es útil cuando necesitamos controlar el acceso a un recurso compartido, como una conexión a una base de datos o un archivo de configuración y para esto debemos manejar una única instancia de la clase..
Cómo debería ser un singleton:
getInstancemétodo que devuelve el valor de la instancia
Usar el patrón Singleton nos brinda ciertas ventajas:
Control de acceso: Puedes tener la certeza de que una clase tiene una única instancia.Punto de acceso global: Obtienes un punto de acceso global a dicha instancia.Inicialización bajo demanda: El objeto Singleton solo se inicializa cuando se requiere por primera vez.
interface Singleton {
getInstance(): Singleton;
}
class Counter implements Singleton {
private instance: Counter;
private counter: number = 0;
constructor() {
this.instance = this;
if (this.instance) {
throw new Error('You can only create one instance!');
}
}
getInstance(): Singleton {
return this;
}
getCount() {
return this.counter;
}
increment() {
return ++this.counter;
}
decrement() {
return --this.counter;
}
}
const counter1 = new Counter();
const counter2 = new Counter();
// Error: You can only create one instance!Output:
counter1 0
Error: You can only create one instance!