¿Alguien puede proporcionar un ejemplo de un patrón singleton y explicar por qué son necesarios?Implementación del patrón singleton en Java
Respuesta
Antes de ir por la ruta singleton, reconsidere. ¿Realmente necesitas un singleton? Si está pidiendo escenarios cuando necesita implementar singletons, es porque la necesidad de ellos realmente no se expresó. Es mejor que no introduzca singletons en su base de códigos solo porque se siente bien seguir los patrones de diseño.
Clean Code Talks - Global State and Singletons
Sin embargo, lo que realmente vale la pena conocer es Dependency Injection.
Ahora bien, si usted realmente desea implementar únicos en Java, recomendaría forma de Joshua Bloch "Effective Java" de implementarlos:
public class Singleton
{
public static Singleton getInstance() {
return SingletonHolder.instance;
}
private Singleton() {}
private static final class SingletonHolder {
static final Singleton instance = new Singleton();
}
}
El JLS garantiza la JVM no va a inicializar instancia hasta que alguien llama getInstance();
Nota final, el Double Checked Locking Pattern is broken in Java up to Java 5. The Java 5 memory model makes the DCL pattern thread safe but it makes it slower than the SingletonHolder
class method while the original intent was performance optimization.
EDIT: Como @Luno señaló, since the second edition of the book, the preferred way is:
partir de la versión 1.5, hay un tercer enfoque para conjuntos unitarios de ejecución. Basta con hacer un tipo de enumeración con un elemento:
// Enum singleton - the preferred approach
public enum Elvis {
INSTANCE;
public void leaveTheBuilding() { ... }
}
Este enfoque es funcionalmente equivalente a la aproximación del campo público, excepto que es más conciso, proporciona el mecanismo de serialización de forma gratuita, y proporciona una garantía rigurosa contra la creación de instancias múltiples, incluso frente a una sofisticada serialización o ataques de reflexión. Si bien este enfoque aún no se ha adoptado ampliamente, un tipo de elemento enum es la mejor manera de implementar un singleton.
. De hecho, Josh Bloch escribe que la mejor manera de implementar Singleton es para usar enum. enumeración MySingletonClass { INSTANCE; } Como se trata de guardar las cadenas, no presenta problemas de serialización ni riesgos de seguridad. –
De hecho, en la segunda edición de Effective Java, Joshua Bloch escribe que ** un tipo de elemento enum es la mejor manera de implementar un singleton ** (http://www.informit.com/articles/article.aspx? p = 1216151 & seqNum = 3). –
@Luno & @Pacal: sí, busqué en Google un extracto y edité la respuesta para completarlo –
Básicamente, en Java que implemente Singleton dando una clase de un no-args constructor privado (private MyClass()
), y de forma estática (o perezoso) inicializar una sola instancia de la clase que sea devuelto por un método estático MyClass getInstance()
.
Lo utilizará cuando desee que no haya más de una sola instancia de su clase a lo largo de toda la aplicación.
'Simply Singleton' en JavaWorld
Y si realmente desea conseguir en las trincheras, comenzar a leer acerca de "estática vs Singleton" en la groups, o Google él. ¡Siempre es un tema candente para decir lo menos!
danben tiene un muy buen resumen de lo que es un singleton, así que no voy a repetirlo.
En lo que respecta a los usos, los singletons a menudo son implementaciones apenas veladas de variables globales (lo cual es una mala idea).Pueden ser útiles para cosas como enrutadores de mensajes o clases de administrador (entre otras cosas).
Un lugar que a menudo se subestima donde los singletons son buenos es cuando se quiere abstraer la existencia del estado. Un ejemplo es un generador de números aleatorios. En el nivel de la abstracción, solo genera números aleatorios y no tiene ningún estado que la persona que llama deba preocuparse. En el nivel de implementación, sin embargo, el estado está involucrado. Otro es cuando una función almacena resultados en caché o cálculos intermedios, pero desea ocultar este detalle de la persona que llama.
Aquí hay una compensación importante. Si crea cosas como estos singletons, disminuirá la cantidad de detalles de implementación que debe preocupar a la persona que llama de su función, disminuyendo así el acoplamiento en esa dirección. Sin embargo, al mismo tiempo acoplas fuertemente tu función al objeto singleton, lo que dificulta la prueba, etc. La decisión sobre si usar un singleton debe basarse en la dirección en la que te importa reducir el acoplamiento en más.
supone que tiene sólo una impresora en la oficina y necesitas Asegurar una clase de impresora tiene sólo una instancia
printer{
private static printer instance =null;
private printer(){}
public static printer getinst(){
if(instance==null){
instant = new printer();
}
return instance;
}
}
en el principal
printer v=printer.geti();
- 1. Java Singleton patrón
- 2. patrón singleton en java. inicialización diferida
- 3. patrón singleton en VB
- 4. Patrón Singleton
- 5. Patrón singleton en C++
- 6. Implementación del patrón de decorador
- 7. Ejemplo de patrón Singleton
- 8. ¿Es segura la implementación de Meyers del hilo del patrón Singleton?
- 9. Patrón de diseño singleton: escollos
- 10. Implementación del patrón de repositorio
- 11. Implementación del patrón de adaptador
- 12. Implementación del patrón de repositorio en Python?
- 13. Patrón de diseño singleton vs Singleton beans en contenedor Spring
- 14. Alternativas para el patrón singleton?
- 15. Ayuda de implementación del patrón de especificación
- 16. Implementación de patrón de eventos de dominio en Java?
- 17. ¿Patrón de registro o Singleton en PHP?
- 18. Implementación del patrón Método de plantilla en C#
- 19. Patrones DI y Singleton en una implementación
- 20. clase Singleton en java
- 21. @Singleton en Java EJB
- 22. correctamente usando el patrón de diseño Singleton
- 23. Implementación segura de singleton de subprocesos en C++
- 24. Objective-C - ¿Optimizar este patrón singleton?
- 25. ¿Corregir el patrón Singleton Objective C (iOS)?
- 26. Implementación del patrón DAO en el proyecto de Android
- 27. Java Singleton Design Pattern: Preguntas
- 28. ¿Una implementación singleton obvia para .NET?
- 29. ¿Existe una implementación del patrón ActiveRecord en Java como la de Ruby?
- 30. MVC patrón de código fuente Singleton
Para aceptar respuestas a sus preguntas, es necesario hacer clic la marca de verificación que aparece en gris debajo del puntaje de una respuesta: estas marcas se volverán verdes, lo que significa que usted las aceptó, consulte http://stackoverflow.com/faq –