¿Qué es un singleton?
¿Cómo funciona el singleton?
-
Asegurar la creación de un único objeto
Ya que el propósito de una clase singleton es que solo se pueda crear un único objeto de ella, el mecanismo de creación de objetos debe ser modificado de tal manera que se utilice solo una vez el constructor, pero ¿cómo logramos esto? la manera correcta es dejar que la clase misma controle su propio constructor y que ninguna otra entidad pueda tener acceso a este, en otras palabras, habrá que declarar el constructor como privado y programar lo necesario para que este solo sea usado una vez en todo el programa.
-
Acceso al único objeto
Una vez contemplado el problema del único objeto surge otra incógnita ¿cómo usar ese objeto? el truco está en proporcionar una interfaz desde la clase para que las demás entidades puedan interactuar con este objeto. Esto se puede lograr definiendo un método de clase que además sea público, un método con estas características puede ser llamado desde fuera de la clase sin necesidad de haber creado un objeto de la misma.
-
¿Cómo se crea el objeto dentro de la clase?
Ya que nos aseguramos de que la clase controla el constructor y que además proporciona una interfaz para interactuar con su único objeto, resta pensar en cómo existe y se maneja esta instancia dentro de la clase. La respuesta recae en usar una referencia o un apuntador, la variable que al final contendrá la memoria que representa al objeto, esta referencia debe tener las siguientes características:
-
- Ser un atributo perteneciente a la clase, no a los objetos de dicha clase: esto es necesario porque, al no tener un objeto inicialmente, se requiere usar un atributo accesible desde la clase.
-
- Ser visible únicamente dentro de la clase, aunque esta es una característica fundamental de la POO, no está de más recordar que hay que aplicar encapsulamiento para proteger los atributos de una clase.
Resuelto lo anterior solo queda discutir sobre la tan mencionada interfaz con el exterior y el uso interno del constructor. Para empezar, dicha interfaz será usada por las entidades que quieran interactuar con el singleton, entonces cada vez que se llame a este método, dentro de la clase se deberá acceder al objeto; aquí nos encontramos con dos posibilidades:
-
- El objeto aún no es creado y debe ser construido y guardado en el atributo de referencia para finalmente retornar esa referencia, esta será la primera y última vez que se utiliza el constructor.
-
- El objeto ya existe y simplemente basta con retornar la referencia existente.
Me encantó la información y la manera en la que lo han explicado; hay algo que se llama microservicios, espero encontrar un artículo acerca de ello sería muy bueno. Sigan así, este es un excelente trabajo.
Muchas gracias por leernos Pedro, me alegra que te gustara la nota y tomaremos en cuenta tu sugerencia
¡Saludos!