language-agnostic design-patterns oop singleton

language agnostic - ¿Qué pasa con Singleton?



language-agnostic design-patterns (9)

No pierdas tu tiempo con esta pregunta. Seguimiento hasta: ¿Qué hay de malo en singletons?

Por favor, siéntete libre de perra en Singleton .

El uso inapropiado de Singleton puede causar mucha pintura. ¿Qué tipo de problema experimentaste con Singleton? ¿Cuál es el mal uso común de este patrón?

Después de investigar en la respuesta de Corey, descubrí algunos artículos importantes sobre este tema.


A veces puede hacer que su código se una más estrechamente con la clase singleton que se refree directamente por nombre de diferentes partes de su base de código. Entonces, por ejemplo, cuando necesita probar alguna parte de su código y hace referencia a un singleton desde una parte diferente del código, no puede falsificar fácilmente esa dependencia con un objeto simulado.


Básicamente, singleton es una forma de tener datos estáticos y pretender que no es realmente estático.

Por supuesto que lo uso, pero trato de no abusar de él.


Creo que una pregunta más apropiada podría ser: ¿en qué situaciones es inapropiado el uso de un patrón SIngleton? O qué has visto que usa un Singleton que no debería.


La mayoría de los patrones únicos que veo escritos no están escritos de manera segura. Si se escriben correctamente, pueden ser útiles.


No hay nada de malo con un singleton en sí mismo, y como patrón, cumple una función vital al reconocer la necesidad de que ciertos objetos solo se creen una sola vez.

Para lo que se usa con frecuencia es un eufemismo para las variables globales como un intento de evitar el estigma de la variable global, y este uso es intrínsecamente incorrecto. Si una variable global resulta ser la solución correcta, el uso de un singleton no lo mejorará. Si es (como es bastante común) incorrecto utilizar una variable global, envolverlo en un singleton no lo hará más correcto.


No hay nada intrínsecamente incorrecto con el patrón de Singleton. Es una herramienta y, a veces, debe ser utilizada.


No he estado expuesto al Singleton tanto como algunos de los otros carteles, pero casi todas las implementaciones que he visto (en C #) podrían haberse logrado con clases / métodos estáticos. Supongo que podría argumentar que una clase estática es una implementación del patrón singleton, pero eso no es lo que he estado viendo. He estado viendo cómo las personas construyen y administran estas clases / objetos de Singleton cuando lo único que realmente necesitaban era usar la palabra clave estática.

Entonces, no diría que el patrón de Singleton es malo. Yo diría que es como pistolas. No creo que las armas sean malas, pero sin duda pueden usarse de forma inapropiada.


Un problema básico con el diseño original de GoF es el hecho de que el destructor no está protegido. Cualquier persona con una referencia a la instancia singleton puede destruir el singleton.

Ver la actualización de John Vlissides "To Kill A Singleton" en su libro "Pattern Hatching" ( enlace de Amazon ).

aclamaciones,

Robar