Tag Archives: C#

Patrones de diseño: Patrón Singleton.

En programación, los patrones de diseño son soluciones “estandar” a problemas cotidianos. Un (anti)patrón es una solución (errónea) a un problema cotidiano.

Existen muchos tipos de patrones y (anti)patrones de diseño, algunos enfocados en unos aspectos y otros en otros. En esta ocasión veremos el (anti)patrón Singleton, ya que es uno de los más (erróneamente) extendidos.

(Anti)Patrón Singleton
El (anti)patrón Singleton sirve para asegurar que un objeto solo pueda ser instanciado una única vez y siempre está presente en cualquier punto de la aplicación. Singleton es un (anti)patrón ya que oculta las dependencias de una clase. Del mismo modo, son similares a las variables globales cuyo uso también se considera una mala práctica.

Es habitual ver aplicado este (anti)patrón, por ejemplo, cuando se quiere instanciar un único objeto que nos de acceso a una base de datos y que siempre nos devuelva la misma conexión.

Implementación en C# (.net):

Implementación en Python:

Usar el (anti)patrón Singletón es una mala práctica. La solución adecuada es usar Inyección de dependencias.

Referencias:
http://msdn.microsoft.com/en-us/library/ff650316.aspx
http://misko.hevery.com/2008/10/21/dependency-injection-myth-reference-passing/
http://misko.hevery.com/2008/08/25/root-cause-of-singletons/
http://misko.hevery.com/2008/08/17/singletons-are-pathological-liars/
http://blogs.msdn.com/b/scottdensmore/archive/2004/05/25/140827.aspx
http://stackoverflow.com/questions/42558/python-and-the-singleton-pattern