Jul 22 2008
Implementación del patrón Singleton en C# {
El patrón Singleton se utiliza cuando es necesario tener una única instancia de una clase para toda la aplicación, ésto se logra otorgando la responsabilidad de crear la instancia a la misma clase. En nuestro ejemplo vemos que el constructor es privado y la propiedad Instancia se encarga de instanciar el objeto, (si éste no fue instanciado antes), y devolver la única instancia.
El código de nuestra clase es el siguiente:
public class objetoSingleton { private DateTime _creacion; private Int64 _contador = 0; public event onCambioContador CambioContador; public delegate void onCambioContador(Int64 nuevoValor); #region Singleton private static Object lockObject = new Object(); private static objetoSingleton _instancia; private objetoSingleton() { this._creacion = DateTime.Now; } public static objetoSingleton Instancia { get { lock (lockObject) { if (_instancia == null) { _instancia = new objetoSingleton(); } return _instancia; } } } #endregion public DateTime FechaHoraCreacion { get { return _creacion; } } public void SumarContador(Int64 valor) { _contador += valor; CambioContador(_contador); } public Int64 Contador { get { return _contador; } } }
Como se puede ver en el código, al cambiar el valor del contador se lanza un evento, que luego capturaremos para mostrar el valor del contador.
Para probar nuestro Singleton, vamos a usar un form, que podrá acceder directamente al objeto para sumar 1 al contador, podrá además crear 42 hilos que sumarán números aleatorios al contador y también podrá crear instancias de si mismo.
Al final del artículo está el enlace para descargar el proyecto hecho en Visual Studio 2005, además en este post estudiaremos el manejo de hilos, (threads), en C# utilizado en el form.
Descargar el ejemplo de Patrón Singleton en C# (21.22 KB)
}