Definiciones 1. singleton patrón de diseño
Singleton asegura patrón de diseño que sólo una instancia de una clase de objeto, la clase misma es responsable de crear sus propios objetos y proporcionar el ejemplo de todo el sistema. Al acceder a este objeto, los visitantes pueden obtener directamente al objeto único sin tener que crear una instancia por el visitante.
patrón de diseño Singleton asegura la unicidad del objeto global, y tienen aplicaciones en muchos escenarios. Windows, por ejemplo, varios procesos o hilos que funcionan simultáneamente un archivo, todos los procesos o hilos se debe hacer para tratar con el mismo archivo a través de una instancia única.
Varios patrón de diseño Singleton 2. aplicación java
La característica más importante es el diseño Singleton constructor de clase es privado , para asegurar que los objetos sólo pueden ser creados por la propia clase, pero los visitantes no se pueden crear instancias. A continuación se describen cinco clases de Java comúnmente usada Singleton implementaciones de patrones de diseño:
2.1 estilo perezoso
. 1 público clase el Singleton { 2 privada estática la instancia Singleton; // instancia de una clase . 3 privada la Singleton () {}; . 4 . 5 // Si no se ha creado la instancia, la creación de instancias de la clase y devuelve el tiempo adquirido . 6 pública estática la Singleton la getInstance () { 7. IF (ejemplo == nula ) { 8. instancia = nuevo nuevo el Singleton (); . 9 } 10 de retorno ejemplo; . 11 } 12 es }
Son perezosos inicialización (es decir, cuando se requiere el valor de este campo sólo para inicializar): Sólo se crea cuando la necesidad de crear una instancia de un objeto.
Son seguros multi-hilo : No
Lazy hombre es la aplicación más básica, pero no seguro para subprocesos, si varios subprocesos tienen acceso a las clases de objetos, puede haber creado un hilo sino porque no estar sincronizado, otros hilos también puede crear el objeto adicional Singleton. Por lo tanto, esta aplicación sólo puede trabajar en condiciones de un único subproceso.
2,2 + bloqueo de sincronización sincronizado fórmula perezoso
1 pública clase Singleton { 2 privada estática instancia Singleton; 3 privada Singleton () {}; 4 5 público estático sincronizado Singleton getInstance () { 6 si (ejemplo == nula ) { 7 instancia = nuevo Singleton (); 8 } 9 retorno ejemplo; 10 } 11 }
Son perezosos inicialización : Sí
Son seguros multi-hilo : Sí
De esta manera, dando método getInstance () más bloqueo de sincronización sincronizado , de manera que cuando un hilo debe esperar a otros objetos en la adquisición del objeto, otros hilos hasta después de la comunicados de hilo actual la cerradura para obtener el objeto, evitando el problema de la creación de múltiples objetos. Pero de esta manera debido a que los otros hilos deben esperar, la eficiencia es muy baja.
2.3 fórmula hambriento
1 pública clase Singleton { 2 privada estática instancia Singleton = nueva Singleton (); 3 privada Singleton () {}; 4 5 pública estática Singleton getInstance () { 6 retorno ejemplo; 7 } 8 }
Son perezosos inicialización : No
Son seguros multi-hilo : Sí
Hambre cargador de clases de estilo chino inicializado cuando creó su propia instancia de un objeto, a no ser que se reinicie el sistema de recarga de clase, de lo contrario la clase mantendrá siempre que sólo un objeto, de modo seguro para subprocesos.
2.4 cerraduras doble control
1 pública clase Singleton { 2 privado volátil estática instancia Singleton; 3 privada Singleton () {}; 4 5 pública estática Singleton getInstance () { 6 si (ejemplo == nula ) { 7 sincronizado (Singleton. Clase ) { 8 si (ejemplo == nula ) { 9 instancia = nuevo Singleton (); 10 } 11 } 12 } 13 de retorno ejemplo; 14 } 15 }
Son perezosos inicialización : Sí
Son seguros multi-hilo : Sí
Lock es un doble control en el segundo método de optimización anteriormente, dado que todo el sincronizada getInstance () para bloqueo se vuelve menos eficiente, doble necesidad de verificación sólo bloquear la porción de bloqueo de la cerradura, la ejecución eficiente.
Otro valor de punto de mención es que esta implementación para variables de instancia usando un modificador volátil modificado, comprobó los dos funciones principales:
- Asegurar la visibilidad. Utilice variables volátiles definidos asegurará que todos los hilos de rosca son visibles;
- Prohibir la optimización de reordenamiento de instrucciones.
entendido Más específicamente que la referencia este blog .
2.5 clases internas estáticas
1 pública clase Singleton { 2 privado Singleton () {}; 3 4 privada estática clase InnerSingleton { 5 privado estática final de Singleton INSTANCIA = nuevo Singleton (); 6 } 7 pública estática última Singleton getInstance () { 8 de retorno InnerSingleton.INSTANCE; 9 } 10 }
Son perezosos inicialización : Sí
Son seguros multi-hilo : Sí
clases internas estáticas utilizan en la realización del mecanismo cargador de clases para asegurar que sólo un hilo en la inicialización, y porque INSTANCIA adoptó modificación final, no pueden modificarse una vez creada, para asegurar la singularidad del objeto. Además, sólo el display llama al método getInstance () será cargado cuando la clase InnerSingleton para instanciar el objeto.
material de referencia
https://www.runoob.com/design-pattern/singleton-pattern.html
https://www.cnblogs.com/goodAndyxublog/p/11356402.html