Explique en detalle qué es el patrón singleton. ¿Por qué usarlo? ¿cómo utilizar?

La primera lección de aprender la introducción a los patrones de diseño es generalmente un patrón singleton. Básicamente, todos los programadores utilizarán el patrón singleton, que también es el patrón de diseño más simple. Este artículo usará Android para explicar y adjuntar el método de implementación del modo singleton de Object-C y JavaScript al final del artículo. Los comentarios son bienvenidos para explicaciones inapropiadas.

¿Qué es el patrón singleton? De hecho, es muy simple de decir. Algunas clases deben estar disponibles sin importar dónde se usen, y algunos de sus atributos deben compartirse entre diferentes usuarios, y no es conveniente crear varias veces, en este caso, deberíamos usar el modo singleton.

Supongamos que tenemos una clase de herramienta Util, que encapsula el método WriteMyName para escribir el nombre del autor. El nombre del autor se muestra cada vez que se llama. Necesito usar esta clase de herramienta cuando escribo la clase FristActivitiy, por lo que definitivamente llamo a la siguiente declaración

 Util util = new Util();
 unil.writeMyName();

Esto crea un objeto util.
Luego, cuando usaba la clase SecondAcitivty, usaba util para escribir mi nombre en ella.
Así que escribí Util util = new Util();
en ese momento creé otro objeto util.
Cuando escribo 100 clases, se crearán 100 objetos. Si este objeto es muy grande, sin duda provocará un desperdicio de memoria. Este es el primer problema resuelto por el modo singleton, sobrecarga de recursos.
Si mi nombre está almacenado en esta clase y lo cambio un día, solo puedo modificar la clase Unidad o modificarla una por una en la subclase.

El patrón de diseño singleton es muy simple de entender, es decir, solo hay una instancia de una clase, sin importar en qué función cree o use, siempre hay solo un objeto instanciado. En pocas palabras, es Util util = new Util(
);
Esta declaración solo se usará una vez, y usaremos esta nueva utilidad cuando la usemos en cualquier lugar en el futuro. ¿Cómo hacerlo? Es para evitar que cualquier función que no sea util use este método de creación de instancias, solo util puede usarlo y luego pasar este objeto a personas externas para que lo usen. Creo que al ver esto, cualquiera puede escribir un patrón de diseño singleton
public class Util () { private Util () {} - deje que el constructor sea privado privado static final Util util=new Util (); public static Util getutil () {return util ;} } Este es el patrón de diseño singleton más simple sin ningún requisito. Solo necesita privatizar su constructor, y luego escribir una función que pueda pasar su objeto instanciado al exterior, y listo. Pero piénsalo con cuidado. El defecto de este patrón de diseño singleton es muy grande, no tiene juicio, ¿existe esta clase? ¿Se está creando? ¿Es seguro usarlo en un hilo? Ninguno de estos problemas se considera, solo se crea. Pero este método en realidad puede hacer frente a varios escenarios de aplicación simples. Si considera usarlo en un hilo, debe optimizar el código.Aquí hay un ejemplo escrito por mi colega como demostración `package import android.media.MediaPlayer;








/**

  • Creado por YI el 31/7/2017.
    */

clase pública MediaPlayerInstance { instancia de MediaPlayerInstance privada estática = nulo; mediaPlayer privado de MediaPlayer = nulo; privado MediaPlayerInstance(){ mediaPlayer = new MediaPlayer(); } mediaPlayerInstance pública estática getInstance(){ if (instancia == nulo){ sincronizado (MediaPlayerInstance.class ){ if(instancia == nulo){ instancia = new MediaPlayerInstance(); } } } return instancia; } } ` Este código parece molesto, porque muchos bucles están anidados juntos, se llama modo de bloqueo doble, que es el primero. la primera vez para juzgar si esta instancia existe, si es así, no necesitamos crearla, y la segunda vez para juzgar si se está creando, si es así, no necesitamos crearla. Este método tiene una alta probabilidad de garantizar que el objeto singleton que creamos sea único

















Hablemos de un modo singleton implementado por la clase interna de construcción de Java

public class Util(){
private Util(){}

public static util() getUtil(){
return get.util 
}
private static class get{
private static final Util util = new util();
}
}

Cada clase interna no tiene nombre, por lo que no se puede llamar desde el exterior, y cada clase interna se destruirá después de terminar su trabajo. Esta también es la mejor manera de crear un patrón singleton en Java. Escribámoslo aquí hoy
.

Supongo que te gusta

Origin blog.csdn.net/qq_36740186/article/details/76553310
Recomendado
Clasificación