1. Modo de Diseño - Singleton

Comparativas ocho tipos simples

1. ¿Qué es un producto único?

Es de hacer una forma de realización de un solo modo sólo una instancia de la clase de objeto en la memoria del sistema, típicamente proporcionado por un método estático.

2. ¿Por qué utilizar el modelo de un solo caso?

Para objetos con frecuencia crear y destruir objetos, así como crear objetos pesados, los recursos de memoria que consumen mucho tiempo y mucho más, aumentará la sobrecarga de memoria, puede mejorar el rendimiento del sistema Singleton, ahorrando.

3. Los ocho tipos de patrones de diseño contraste

Método 1: Tipo de hombre hambriento (método estático constante)

public class Singleton{
	private Singleton() {}
	private static final Singleton s = new Singleton();
	public static Singleton getInstance() {
		return s;
	}
}

Comentarios: Este modo proporciona una forma estática constante de ejemplo, el método es simple, para asegurar el hilo de seguridad, pero no lo hizo perezoso de carga (carga lenta), si no hay un método para obtener la instancia de la llamada, sino también carga la clase (se carga la clase hay muchos casos), crear un objeto y causa pérdida de recursos, si podemos usar esto para asegurar que ciertos casos, se recomienda este método, JDK instancia de la clase en tiempo de ejecución es conseguir a través de este método.

Método 2: hambrientos fórmula (bloque de código estático)

public class Singleton{
	private Singleton() {}
	private static Singleton s;
	static{
	 	s = new Singleton();
	}
	public static Singleton getInstance() {
		return s;
	}
}

Comentarios: Este método se obtiene por el método del Ejemplo bloque estático de código, el bloque de código estático se ejecuta cuando se carga la clase, las mismas ventajas y desventajas Método1.

Metodo3: lazy-1

public class Singleton{
	private Singleton() {}
	private static Singleton s;
	public static Singleton getInstance() {
		if (s == null) {
			s = new Singleton();
		}
		return s;
	}
}

Comentario: La manera de hacer la carga diferida, de un solo hilo sin problemas, pero en el caso de múltiples hilos, varias instancias pueden ser creados, no puede garantizar el hilo de seguridad, no está disponible.

Método 4: lazy-2

public class Singleton{
	private Singleton() {}
	private static Singleton s;
	public static synchronized Singleton getInstance() {
		if (s == null) {
			s = new Singleton();
		}
		return s;
	}
}

Comentario: La manera de conseguir a través de la sincrónica instancia de método, la sincronización de hilo y asegurar la carga lenta, pero cada instancia debe obtener método de sincronización invocación, resultando en una baja eficiencia, pero la eficiencia no se recomienda para su uso.

Method5: lazy-3-

public class Singleton{
	private Singleton() {}
	private static Singleton s;
	public static Singleton getInstance() {
		if (s == null) {
			synchronized (Singleton.class) {
				s = new Singleton();
			}
		}
		return s;
	}
}

Comentario: En este modo, los bloques de código de sincronización obtenidos por ejemplo, para asegurar que la carga lenta, pero no puede garantizar la sincronización de hilos, multi-hilo disponible.

Method6: doble control

public class Singleton{
	private Singleton() {}
	private static volatile Singleton s = null;
	public static Singleton getInstance() {
		if (s == null) {
			synchronized (Singleton.class) {
				if (s == null) {
					s = new Singleton();
				}
			}
		}
		return s;
	}
}

Comentario: La forma una variable de instancia con modificación volátil, cuando los cambios inmediatamente sincronizados a la memoria principal, para asegurar la sincronización de hilos, carga lenta, sino que también resuelven el problema de la eficiencia se recomienda.

Method7: clases internas estáticas

public class Singleton{
	private Singleton() {}
	static class Single {
		private static final  Singleton s = new Singleton();
	}
	public static Singleton getInstance() {
		return Single.s;
	}
}

Comentario: De esta manera, con la ventaja de unas clases internas estáticas, Singleton no se carga cuando la carga individual, asegurando la carga diferida, la clase individual se cargó en el momento de su uso, y se carga una sola vez, para asegurar que los problemas de eficiencia y sincronización de hilos, se recomienda.

Method8: Enumeración

enum Singleton{
	INSTANCE;
}

Comentario: La manera de conseguir a través de ejemplos Singleton.INSTANCE, el único caso, el hilo de seguridad, se recomienda su uso.

resumen:

1. El nivel de aplicación, más de ocho métodos son factibles en un solo hilo;
2. Nivel de multi-hilo, metodo3 y Method5 no disponible;
3. nivel de eficiencia, no se recomienda método de sincronización metodo3;
4. flojo nivel de carga de dos tipos Method1,2 hombre hambriento no es recomendable;
5. considerar los diversos factores Method6,7,8 recomendados;
Publicado 28 artículos originales · ganado elogios 1 · visitas 530

Supongo que te gusta

Origin blog.csdn.net/qq_40575302/article/details/104411094
Recomendado
Clasificación