design patterns - unity - Sí... Lo sé.. Soy un simplón... Entonces, ¿qué es un Singleton?
singleton unity (8)
Además de su lugar como un patrón de diseño particular, los singletons también pueden considerarse como una sola cosa . Su uso en la programación sin duda se deriva de su uso en las matemáticas, donde un singleton es un conjunto de un solo número.
He intentado algunas veces entender qué es Singleton. Tal vez soy demasiado visual ... así que ¿alguien puede analizarlo en una simple analogía?
Publicaciones similares:
- Diferentes formas de inicializar singletons
- Singleton: ¿Cómo debería usarse?
- ¿Es esto un buen uso del patrón de Singleton?
- ¿Qué hay de malo en singletons?
- Singleton: ¿Cómo debería usarse?
- Singletons: ¿buen diseño o una muleta?
- Global vs Singleton en .NET
- En patrones de diseño: ¿Cuándo usar Singleton?
- Singleton con argumentos en Java
- ¿Cuál es una forma eficiente de implementar un patrón singleton en Java?
- Lo que es alternativo a Singleton
- Los ejemplos más comunes de uso indebido de la clase de clase singleton
- https://stackoverflow.com/questions/1395766/asp-net-objectdatasource-singleton
- ¿Usando Singleton vs Single Call en .NET Remoting?
- ¿Qué es una clase Singleton? ¿Me puede ayudar a ejecutar una sola instancia de una clase para dos servicios relacionados?
Hubo un excelente Google Tech Talk donde el orador abordó el estado global (incluido Singletons) y por qué hacen que las pruebas sean casi imposibles:
The Clean Code Talks - "Estado global y Singletons"
El hablante hace una distinción entre lo que él llama Singletons (''S'' mayúscula), donde se toman medidas para evitar que la clase sea instanciada más de una vez (es decir, a menudo con un método estático getInstance
y constructores privados) y singletons (small '' s '') donde una sola instancia es todo lo que se necesita, pero nada está incorporado en la clase para evitar que se creen varias instancias.
Según lo solicitado, aquí hay algunas analogías:
- La tierra
- El universo
- El elemento oxígeno (hay otros elementos, pero solo un oxígeno. Hay muchas moléculas de oxígeno, pero solo un elemento de oxígeno canónico).
- El concepto de Verdadero
- El concepto de False
Podría crear una instancia de muchos objetos True, pero todos se referirán al mismo elemento real (es decir, el concepto universal de Verdadero). Dependiendo del dominio de su aplicación, puede haber ejemplos más específicos:
- La conexión de base de datos
- El hilo principal de la aplicación
- Cualquier cosa que represente un dispositivo de hardware (es decir, solo desea instanciar un objeto que representa CPU0).
Singleton a veces puede no ser tan soltero. Eche un vistazo aquí: cuando un singleton no es un Singleton? , artículo proporcionado por Sun.
Una recomendación: no lo use. Simplemente no es bueno, puede crear serios cuellos de botella de rendimiento en su aplicación, y el esfuerzo por probar las clases singleton simplemente no lo vale.
Del artículo de Wikipedia mencionado anteriormente:
Cabe señalar que este patrón hace que las pruebas unitarias sean mucho más difíciles, ya que introduce el estado Global en una aplicación.
Otro recurso que vale la pena mirar es esta publicación en el blog de prueba de google.
Singleton es útil cuando debe estar seguro de que hay una y solo una instancia de una clase, y que se debe acceder a este objeto desde varias ubicaciones en el código.
Si podría tener sentido que más de una instancia de tu clase se pudiera usar a la vez, entonces no quieres un singleton.
Aquí hay información sobre dónde usar singletons: http://www.ibm.com/developerworks/webservices/library/co-single.html
Del artículo mencionado anteriormente:
Para decidir si una clase es verdaderamente singleton, debe hacerse algunas preguntas.
- ¿Todas las aplicaciones usarán esta clase exactamente de la misma manera? (exactamente es la palabra clave)
- ¿Alguna vez alguna aplicación necesitará solo una instancia de esta clase?
(alguna vez y una son las palabras clave)Si los clientes de esta clase desconocen la aplicación, son
¿parte de?Si responde afirmativamente a las tres preguntas, entonces ha encontrado un singleton. Los puntos clave aquí son que una clase es solo un singleton si todas las aplicaciones lo tratan exactamente igual y si sus clientes pueden usar la clase sin un contexto de aplicación.
Un singleton es una clase de la cual solo puede haber una instancia en su aplicación. A continuación, comparte esa instancia en toda la aplicación.
Aquí hay un enlace que podría ayudar (también se explica cómo hacer que su hilo singleton sea seguro en c #):
Un singleton es una clase, que solo puede tener una única instancia creada.
Esto a menudo se implementa teniendo un constructor privado, que se asigna a una variable estática, y luego se accede a través de un método público.
Hay algunos problemas con el uso de singletons, que incluyen:
- Hacen las pruebas difíciles
- No pueden ser sub-clasificados
- Una vez instanciado, la instancia vivirá para siempre
Consulte aquí para una descripción más detallada de singleton, y otro patrón ''Monostate'' que podría ser útil en su lugar: http://www.objectmentor.com/resources/articles/SingletonAndMonostate.pdf
Un singleton es una variable global en la piel de oveja :)
http://googletesting.blogspot.com/2008/08/root-cause-of-singletons.html