[C#][Patterns] Patrón Singleton

Javier Torrecilla
Jtorrecilla .NET
Published in
1 min readNov 2, 2016

Aunque es un patrón bastante conocido, vamos a explicarlo brevemente y ver como implementarlo en C#.

Definición

Este patrón basicamente viene a expresar que una clase va a tener una única instancia. Partiendo de la base de que se creara única y exclusivamente desde si misma, y tendrá un punto único de acceso a través de una propiedad de dicha clase.

Ejemplo

Vamos a ver varias formas de implementar el patrón:

La primera, es bastante sencilla, tenemos una clase Log, con un constructor privado, que no podrá invocarse desde fuera de si misma, y tenemos una propiedad estática pública, con su correspondiente variable privada.

Bien, en el get de la propiedad, se compruebe si la variable privada tiene valor, y en otro caso la establece.

Ahora un ejemplo utilizando lock para evitar que en un entorno multihilo para que no se acceda a un trozo de código si otro hilo ya ha entrado en dicho fragmento.

Si necesitamos que nuestro constructor lleve acabo alguna tarea pesada, podemos hacer uso de Lazy<T>. En el constructor del objeto Lazy, estamos invocando al constructor privado, y pasando un parámetro true, para llevar a cabo el lock para garantizar que solo se instancia en un único hilo.

Bueno, en cualquiera de las 3 formas, para poder utilizar nuestro objeto singleton:

var logger = Log.Instance

Espero que os sea de utilidad.

PD: gracias a JuanMa por el comentario en twitter, en el que me recordaba que faltaba una nueva comprobación de instance en el ejemplo con Lock.

--

--

Javier Torrecilla
Jtorrecilla .NET

Geek, Map 2010, MCC 2011, MVP C# 2011/12 Msdn Forum MOD