1. Introducción del modo
Definición de patrón
Asegúrese de que una determinada clase tenga solo una instancia, y la instancia misma y proporcione esta instancia a todo el sistema.
Escenario de uso de modo
Asegúrese de que una clase solo tenga un objeto, por ejemplo, crear un objeto requiere demasiados recursos, como acceder a recursos como IO y bases de datos.
2. Diagrama de clase UML
Introducción al personaje:
(1) Cliente: Cliente de alto nivel.
(2) Singleton: Singleton.
3. Implementación simple del patrón
clase pública singleton {intancia privada de singleton static; Private Singleton () {} public static singleton getInstance () { / * * al principio, cuando entran múltiples hilos, encuentran bloqueos y un hilo entra, que es vacío, nuevo objeto; Los hilos posteriores ingresan, no vacíos, sin operación; Finalmente, regrese directamente * El objeto no está vacío, y múltiples subprocesos ingresan a la función, no vacía, no se realiza una operación de bloqueo, y return directamente */ if (intance == null) {sincronizado (singleton.class) {if (intance == null) {intance = new Singleton (); }} intancia de retorno; }} class Singleton1 {// Lazy private static singleton1 intance = new Singleton1 (); // Lazy, carga privada Singleton1 () {} public static singleton1 getInstance () {intancia de retorno; }} class Singleton2 {// intancia sencilina static staticon2 hambriento; private singleton2 () {} public static singleton2 getInStance () {// Carga if (intance == null) {intance = new SingletOn2 (); } intancia de retorno; }} class Singleton3 {// intancia privada static singleton3; private singleton3 () {} public sincronizado static singleton3 getInStance () {// cargar Cuando se usa, bloquear las llamadas multi-subcontratadas tienen una acción de bloqueo si (intance == null) {intance = new Singleton3 (); } intancia de retorno; }} class Singleton4 {// intancia privada static singleton4; private singleton4 () {} public static singleton4 getInstance () {// colapso sincronizado (singleton4.class) {// La eficiencia de bloqueo es similar a 3 if (intance == null) {intance = new Singleton4 (); }} intancia de retorno; }}4. Pros y desventajas
(1) Ventajas:
R. Dado que el modo singleton solo tiene una instancia en la memoria, el gasto de memoria se reduce, especialmente cuando un objeto debe crearse y destruir con frecuencia, y el rendimiento no puede optimizarse durante la creación o destrucción, las ventajas del modo singleton son muy obvias.
B. Dado que el patrón Singleton solo genera una instancia, se reduce la sobrecarga de rendimiento del sistema. Cuando la generación de un objeto requiere muchos recursos, como leer la configuración y generar otros objetos dependientes, se puede resolver generando directamente un objeto Singleton cuando la aplicación comienza y luego reside permanentemente en la memoria;
C. El modo Singleton puede evitar múltiples ocupaciones de recursos, como una acción de archivo de escritura, porque solo una instancia está en la memoria, evite las operaciones de escritura simultánea en el mismo archivo de recursos.
D. El modo Singleton puede establecer puntos de acceso global en el sistema, optimizar y compartir el acceso a los recursos. Por ejemplo, una clase Singleton puede diseñarse para ser responsable del mapeo y el procesamiento de todas las tablas de datos.
(2) Desventajas
A. El modo singleton generalmente no tiene interfaz, y es difícil de expandir. Si desea expandirse, básicamente no hay una segunda forma de implementarlo, excepto modificar el código.