
Patrones de Diseño: Singleton
¿En qué consiste?
La idea principal es garantizar que sólo se generará y utilizará un único objeto la aplicación.
¿Cuándo utilizarlo?
- Un objeto que debe ser único en toda la aplicación.
- Cuando la creación de un nuevo objeto no genera diferencia alguna si se utiliza el mismo objeto creado por otra instancia.
- Se quiere garantizar que el valor asignado al objeto sea el mismo desde distintas partes del código
- La creación del mismo objeto es demasiado frecuente y puede causar un aumento drástico de consumo de memoria.
Ejemplos de uso
- Generar conexiones a bases de datos.
- Obtención de un valor constante para toda la aplicación y queremos evitar el consumo de memoria al crearlo multiples veces.
- Geremos garantizar que las operaciones se realicen sobre un único objeto y no copias de él.
¿Cómo generarlo?
La clave está en crear un método static
y añadir una condición
en dicho método que revise si el objeto ya ha sido generado
Revisa los comentarios en la siguiente clase
class DBInstance {
// 1.- crea un attributo 'static' para la instancia
private static _instance: DBClient; // Definir una variable privada para la instacia del objeto.
//parámetos de conexión
private static _URL: string;
private static _USER: string;
private static _PASS: string;
// 2.- Crea un método 'static' para que no tener que utilizar 'new'
// y crear un objeto distinto para cada llamado.
static getDocClient(): DBClient {
// 3.- Condición if para asegurar que no se vuelva a crear.
if (!this._instance) {
this._instance = new DBClient.connect({
url: this._URL,
user: this._USER,
pass: this._PASS,
});
}
return this._instance;
}
}
export { DBInstance };