En la programación orientada a objetos, una clase singleton es una clase que solo puede tener un objeto (una instancia de la clase) a la vez. Después de la primera vez, si intentamos instanciar la clase Singleton, la nueva variable también apunta a la primera instancia creada. Entonces, cualquier modificación que hagamos a cualquier variable dentro de la clase a través de cualquier instancia, afecta la variable de la única instancia creada y es visible si accedemos a esa variable a través de cualquier variable de ese tipo de clase definido.
Recuerde los puntos clave al definir la clase como una clase única, es decir, al diseñar una clase única:
- Haz que un constructor sea privado.
- Escriba un método estático que tenga el objeto de tipo de retorno de esta clase singleton. Aquí, el concepto de inicialización diferida se usa para escribir este método estático.
Propósito de la clase Singleton
El propósito principal de una clase Singleton es restringir el límite del número de creación de objetos a uno solo. Esto a menudo garantiza que haya control de acceso a los recursos, por ejemplo, conexión de socket o base de datos.
El desperdicio de espacio de memoria no ocurre con el uso de la clase singleton porque restringe la creación de instancias. Como la creación del objeto se realizará solo una vez en lugar de crearlo cada vez que se realice una nueva solicitud.
Podemos usar este único objeto repetidamente según los requisitos. Esta es la razón por la que las aplicaciones de base de datos y de subprocesos múltiples utilizan principalmente el patrón Singleton en Java para el almacenamiento en caché, el registro, la agrupación de subprocesos, los ajustes de configuración y mucho más.
Por ejemplo, hay una licencia con nosotros, y solo tenemos una conexión de base de datos o supongamos que si nuestro controlador JDBC no nos permite hacer subprocesos múltiples, entonces la clase Singleton entra en escena y se asegura de que a la vez, solo una conexión única o un solo hilo puede acceder a la conexión.
¿Cómo diseñar/crear una clase Singleton en Java?
Para crear una clase singleton, debemos seguir los pasos que se detallan a continuación:
1. Asegúrese de que solo exista una instancia de la clase.
2. Proporcionar acceso global a esa instancia por
- Declarar que todos los constructores de la clase son privados.
- Proporcionar un método estático que devuelve una referencia a la instancia. El concepto de inicialización diferida se utiliza para escribir los métodos estáticos.
- La instancia se almacena como una variable estática privada.
Un ejemplo de clases singleton es la clase Runtime, Action Servlet, Service Locator . Los constructores privados y los métodos de fábrica también son un ejemplo de la clase singleton.
Diferencia entre la clase normal y la clase Singleton
Podemos distinguir una clase Singleton de las clases habituales con respecto al proceso de instanciación del objeto de la clase. Para instanciar una clase normal, usamos un constructor Java. Por otro lado, para instanciar una clase singleton, usamos el método getInstance().
La otra diferencia es que una clase normal se desvanece al final del ciclo de vida de la aplicación, mientras que la clase singleton no se destruye con la finalización de una aplicación.
Formas del patrón de clase Singleton
Hay dos formas de patrón de diseño singleton, que son:
- Instanciación temprana: la creación del objeto tiene lugar en el momento de la carga.
- Instanciación diferida: la creación del objeto se realiza de acuerdo con el requisito.
Implementación: resumamos cómo la clase singleton varía de la clase normal en Java. Aquí la diferencia está en términos de creación de instancias, ya que para la clase normal usamos constructor, mientras que para la clase singleton usamos el método getInstance() que veremos en el ejemplo 1 como se muestra a continuación. En general, para evitar confusiones, también podemos usar el nombre de la clase como nombre del método al definir este método, que será como se muestra en el ejemplo 2 a continuación.
div hideAd=”auto”>
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA