Patrones de Diseño: Singleton

Este post marca el inicio de una serie que cubrirá los 23 patrones de diseño definidos en el libro "Design Patterns: Elements of Reusable Object Oriented Software" de Gamma, Helm, Johnson y Vlissides, más conocidos como La Banda de los Cuatro (Gang of Four o GoF). Empezaré con uno de los patrones más fáciles de implementar: el Patrón Singleton. Según el libro de Dessign Patterns, el propósito del patrón Singleton es: Asegurarse que una clase tiene solamente una instancia, y provee un punto de acceso global a ella. Conozco dos formas de implementar este patrón:
 

Hacer privados los constructores de la clase e implementar un método estático que cree las instancias. Implementar los mecanismos de control en los constructores de la clase.

Se recomienda usar el primer enfoque, porque es preferible tener un método especializado que implemente el patrón Singleton y dejar que el constructor haga las cosas que se supone que debe hacer: Inicializar las propiedades del objeto. A manera de ejemplo, imaginemos que estamos creando un juego de Pacman, es lógico pensar que en nuestro juego debe existir UN y solo UN Pacman, entonces es una buena oportunidad para implementar un patrón Singleton, asi:

class Pacman { #region Patron Singleton private static Pacman instancia = null; public static Pacman Create() { if (instancia == null) instancia = new Pacman(); return instancia; } #endregion private Pacman() { // Inicializar Objeto } }

Obtenemos un error pues el constructor solo es accesible desde el interior de la Clase. de esta manera: Pacman p = new Pacman(). La única forma de obtener nuestro Pacman. . Toda la acción ocurre en el método Create que inspecciona el valor de la variable instancia para determinar si debe crear o no una instancia de la Clase Pacman. es mediante el método Create asi: Pacman p = Pacman.Podemos ver que hemos declarado el constructor como private de modo que no sea accesible desde el exterior de la Clase. si intentamos crear una instancia de la clase Pacman usando el constructor. Si ya existe una instancia. Si no existe (si instancia == null). entonces se crea una nueva instancia y la almacena en el campo instancia. La implementación del patrón Singleton es bastante directa.Create(). entonces esa instancia será devuelta Entonces.

Sign up to vote on this title
UsefulNot useful