Implementación del patrón de diseño Singleton en Java

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:

  1. Asegurar la visibilidad. Utilice variables volátiles definidos asegurará que todos los hilos de rosca son visibles;
  2. 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

 

Supongo que te gusta

Origin www.cnblogs.com/rezero/p/12568534.html
Recomendado
Clasificación