viernes, 6 de marzo de 2020

Patrones de diseño: Singleton



El patrón de diseño que hoy les traemos en void; es el patrón Singleton, un patrón de diseño de lo más sencillo, y que podemos empezar a implementar en nuestros programas de una manera fácil. No vamos a complicar la cosa mucho, en este artículo encontrarás lo justo y necesario para pasar a dominarlo sin enredarnos con conceptos irrelevantes. Vamos a conocerlo.

Este patrón se encarga de asegurar que en nuestro programa haya una (y solo una) instancia de determinada clase y provee un punto de acceso a esta instancia. Podemos determinar acá que este patrón debe ser usado con un lenguaje que tenga el paradigma POO (programación orientada a objetos).

Cada cuál, como en todos los patrones de diseño, es el encargado de analizar el problema que esté enfrentando y determinar si el patrón Singleton puede serle útil, por ejemplo en casos donde cierta información deba ser compartida en diferentes puntos, podemos ir pasando este objeto con la información y estamos seguros que siempre vamos a estar accediendo a la misma instancia de ese objeto, que la información es la misma siempre que accedemos a ella. Claro está, con este tipo de implementaciones debemos tener especial cuidado con la seguridad y la integridad de los datos, es simplemente un ejemplo ficticio a grandes rasgos.

En la concepción original de éste patrón de diseño se plantea que el acceso a este objeto sea global, pero esto trae un montón de inconvenientes, desde seguridad hasta complejidad para hacer pruebas y para determinar un contexto bien definido donde reside el objeto, queda en nosotros lidiar con esos problemas y poder contar con su poderosa utilidad.

Veamos el diagrama UML que define nuestro patrón Singleton:

Podemos extraer una serie de conclusiones que nos van a permitir asegurar que implementemos correctamente este patrón de diseño:

  • Será la propia clase la encargada de crear la instancia, ésto será implementado en la función getInstance () que veremos más abajo en profundidad. Esta instancia será almacenada en una variable static privada de la clase Singleton. 
  • El acceso a dicha instancia se hace mediante un método de clase (con el modificador static).
  • El constructor de la clase será declarado private, con ésto evitamos que puedan ser creadas nuevas instancias en otros puntos de nuestro programa.
Recordemos que cuando definimos una atributo o un método en una clase como static, lo que logramos es permitir que se acceda a éste sin necesidad de hacerlo por medio de un objeto ya construido. Es decir, el atributo y el método no son de cada objeto, si no de la clase en sí.

Por último, vamos a mostrar cómo implementar correctamente la función getInstance () para asegurar el correcto funcionamiento de este patrón de diseño:


public static Singleton getInstance () {

    if (singleton == null) {

        singleton = new Singleton();
    }

    return singleton;
}

El ejemplo del código, hecho en Java, se basa en el UML anterior, y lo que hacemos acá es básicamente comprobar si ya hay una instancia creada: si no la hay, la creamos; si la hay no creamos una nueva ni la sobreescribimos, la dejamos tal cual. Al final, devolvemos esta instancia.
Y con ésto y tenemos lo necesario para integrar este patrón de diseño Singleton en nuestros proyectos y solucionar algunos problemas de una manera mucho más sencilla y clara.

No hay comentarios:

Publicar un comentario

Lo último

recentposts

Random

randomposts