Definición: La función principal del patrón Singleton es garantizar que en las aplicaciones Java, solo exista una instancia de una clase.
En muchas operaciones, como el establecimiento de una conexión de base de datos de directorio, se requiere una operación de un solo hilo.
Además, Singleton puede ser de estado; Clases Singleton ¿Puede mantener este recuento y aumentar automáticamente 1 sincronizar de forma segura?
Además, Singleton también puede ser apátrate. Proporciona funciones similares a la herramienta,
El modelo Singleton nos proporciona la posibilidad de implementar de esta manera. La ventaja de usar Singleton es que puede ahorrar memoria, ya que limita el número de instancias y es propicio para la recolección de basura de Java.
A menudo vemos que los cargadores de clase también se implementan en modo Singleton en modo de fábrica, porque la clase cargada en realidad pertenece a los recursos.
Cómo usar el modo singleton
El patrón general singleton generalmente tiene varias formas:
La copia del código es la siguiente:
Singleton de clase pública {
Singleton privado () {}
// ¿No es extraño definir una instancia de ti mismo dentro de ti mismo?
// Tenga en cuenta que esto es privado solo para llamadas internas
Instancia privada de Singleton Singleton = new Singleton ();
// Aquí hay un método estático para el acceso externo a esta clase, a la que se puede acceder directamente
public static singleton getInstance () {
instancia de retorno;
}
}
La segunda forma:
La copia del código es la siguiente:
Singleton de clase pública {
Instancia privada de Singleton Singleton = NULL;
Public static sincronizado sincronizado getInstance () {
// Este método se mejora sobre lo anterior.
// ¡Crear instancias durante el uso, mejorando la eficiencia!
if (instancia == nulo)
instancia = new Singleton ();
instancia de retorno;
}
}
Singleton.getInstance () se puede usar para acceder a clases de singleton.
La segunda forma anterior es la inicialización perezosa, lo que significa que el singleton inicial se requiere por primera vez y no es necesario generar en el futuro.
Tenga en cuenta que es importante sincronizado en el formulario de inicialización perezosa. Hay muchas discusiones sobre la inicialización perezosa sobre el bloqueo de doble verificación (DCL), y los interesados en él lo estudiarán.
En general, se cree que la primera forma es más segura.
Cosas a tener en cuenta al usar el modo Singleton
A veces, en algunos casos, el uso de Singleton no puede lograr el propósito de Singleton. -Server y Cross-JVM.
Tomemos el ServiceLocator del código fuente de Sun’s Pet Store (Store 1.3.1) como ejemplo y lo analicemos brevemente:
En la tienda de PET, hay dos tipos de ServiceLocator, uno está en el directorio EJB y el otro está en el directorio web. Servicios de posicionamiento, pero ¿por qué separarlos? Después de un estudio cuidadoso de estos dos servicios, encontré la diferencia: ServiceLocator adopta el modo singleton en la web, ServiceLocator pertenece al posicionamiento de recursos, por lo que, por supuesto, se debe usar el modo Singleton. Sin embargo, en EJB, el modelo Singleton ha perdido su función, por lo que ServiceLocator se divide en dos tipos, uno es para servicios web y el otro es para servicios EJB.
El patrón de singleton se ve simple y es muy conveniente de usar, pero es muy difícil usarlo bien.