¿Por qué los singletons se consideran mal diseño?

Los singletons no se consideran universalmente mal diseño, sin embargo, la mayoría de los casos de uso de singletons están adecuadamente cubiertos por otros patrones menos controvertidos.

Algunas razones por las que se consideran malas:

  • La concurrencia es difícil con los singletons, como lo es distribuir su computación en múltiples máquinas.
  • Si luego desea extraer parte de su código en una biblioteca, probablemente debería descomponer sus singletons ya que pueden suceder cosas extrañas.
  • Algunos programadores ven el uso de singletons como la creación de un estado global innecesario. Esto se debe a que algunos programadores novatos, al enterarse del patrón singleton, intentan convertir todo bajo el sol en un singleton, lo que significa que OO se sale de la ventana y básicamente nos queda un enorme espacio de nombres global.

Los Singletons son buenos si se usan para proporcionar un único punto de acceso a un recurso único: entrada / salida estándar, tal vez. Sin embargo, debe estar muy seguro de que solo NUNCA necesitará una instancia de esta cosa antes de considerar un singleton.

Y definitivamente debe separar el comportamiento real del singleton del código de fábrica que inicializa y sirve su instancia única; eso es bueno OO.