RSS

GoF – Patrones de diseño (VII): Singleton

09 May

El siguiente de los patrones que vamos a ver es el de Singleton. Asumo que muchos de vosotros ya lo conoceréis ya que es muy común y muchas clases Java lo implementan, pero había que explicarlo también.

El objetivo de este patrón es asegurarse de que de una clase solo existe una instancia y que esta es accesible, o mejor dicho, ofrecer un punto de acceso a ella.

Existen muchas clases para las cuales es importante tener únicamente una sola instancia que pueda ser utilizada en muchas partes diferentes del sistema. Por ejemplo, por muchas impresoras que haya en nuestro sistema lo interesante es tener una sola cola de impresión que maneje todas las impresiones. Otro ejemplo podría ser un gestor de ventanas de una aplicación, ya que no vamos a tener varios gestores de ventanas para una misma aplicación. Y sin duda, una que todo programador de Java conocerá, la clase Calendar que es un objeto que implementa el patrón Singleton. Si no lo sabías aún, terminad de leer el artículo y os daréis cuenta fácilmente de ello.

Vamos a empezar. Para ello mantengamos dos ideas en la cabeza: tener una sola instancia y que sea accesible desde cualquier parte de nuestra aplicación.

Alguno estará pensando que teniendo variables globales, ¿para qué hace falta este patrón? Pero pensemos que esto hace un objeto accesible desde cualquier lado, pero no nos asegura la existencia de una sola instancia ya que se pueden crear nuevas instancias. El crearlas o no, quedaría en manos de los desarrolladores, lo cual sabemos que es una buena idea siempre.

Algunos de los beneficios que nos aporta el patrón son:

  • Poder controlar el acceso a la instancia.
  • Reduce el espacio de nombres ya que evita contaminarlo con variables globales.
  • Permite refinar operaciones y la representación a través de la creación de subclases.
  • Permite controlar fácilmente y sin apenas cambios el número de instancias que creamos. Sé que el patrón está enfocado a tener una sola instancia, pero en determinadas circunstancias quizás necesitamos dos o tres por ejemplo.

Todo esto está muy bien, pero vamos a ver un poco de código, porque este patrón es tan simple que con un simple vistazo al código lo entenderemos muy fácilmente.

Clase que implementa patrón Singleton:

public class PrintSpooler {
    private static PrintSpooler instance = null;
    protected PrintSpooler() {
        …
    }
    public static PrintSpooler getInstance() {
        if (instance == null) {
            instance = new PrintSpooler();
        }
        return instance;
    }
}

Main:

public class Main {
    public static void main(String[] args) {
        PrintSpooler spooler = PrintSpooler.getInstance();
        …
    }
}

Como podéis ver el constructor del objeto no es accesible y el el método “getInstance” el que gestiona si se ha de crear o no una instancia del objeto, de forma que si ya existe devuelve la instancia existente.

¿Veis ahora la similitud con la clase Calendar de Java?

Hasta aquí hemos llegado con los patrones creacionales. A partir de aquí, en sucesivos artículos empezaremos a ver los patrones estructurales. Nos vemos.

Anuncios
 
Deja un comentario

Publicado por en 9 mayo, 2013 en Patrones de diseño(GoF)

 

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: