Posteado por: JuanFran | enero 4, 2010

Vuelta…. un poco de metodología: SINGLETON

Muy buenas,

volvemos al blog, y vamos bien, a post por año….  hoy voy a comentar un patrón de diseño bastante eficaz: singleton.

El patrón de diseño singleton (o para los de aquí, instancia única) trata de mantener un acceso único a un objeto que solo tendrá una instancia, es decir, es un objeto global y único en nuestra aplicación.

¿Pará que es útil este patrón de diseño? Pués tiene muchas utilidades… por ejemplo, para el acceso a recursos únicos o para tener “a mano” unos datos o funcionalidades para todos los objetos. Para ello, se debe garantizar que el construcctor de nuestra clase singleton sea privada, de esa forma nos aseguramos que solo pueda haber una instancia de la clase:

public class Singleton {
private static Singleton miObjeto = null;
private Singleton() {
}
}

Ahora, solo nos queda el acceso restringido a nuestro objeto. Para ello, solo añadir a la clase un método de recogida de la instancia:

public class Singleton {
private static Singleton miObjeto = null;
private Singleton() {
}
public static Singleton getInstancia() {
if (miObjeto == null) {
miObjeto = new Singleton();
}
return miObjeto;
}
}

Con esto ya tenemos el patrón implementado con lo básico, ahora, solo añadir los métodos que se quieran para hacerlo totalmente funcional.

Para llamar desde nuestro código:

Singleton objetoSingleton = Singleton.getInstancia();

Veamos un pequeño ejemplo. Vamos a tener una clase que se encarga de tener almacenana la conexión con una base de datos MySQL. Para ello, usaremos el patrón Singleton para el acceso a dicha conexión.

public class ConexionSingleton {
private static ConexionSingleton instancia = null;
private java.sql.Connection conexion = null;
private ConexionSingleton() {
}
public static ConexionSingleton getInstancia() {
if (instancia == null) {
instancia = new ConexionSingleton();
}
return instancia;
}
/* devuelve true si se ha creado correctamente */
public boolean crearConexion() {
try {
Class.forName(“com.mysql.jdbc.Driver”);
conexion = DriverManager.getConnection(“urlBaseDatos”, “usuarioBaseDatos”, “passwordBaseDatos”);
} catch (Exception e) {
return false;
}
return true;
}
public java.sql.Connection getConexion() {
if (conexion == null) {
crearConexion();
}
return conexion;
}
}

Llamando desde nuestro código principal:

ConexionSingleton.getInstancia().crearConexion();

java.sql.Connection conexion = ConexionSingleton.getInstancia().getConexion();

Espero que os sea útil. Saludos!

PD: a ver si aprendo a manejar mejor el blog, así no me sale el código tan feote como me ha salido :mrgreen:

Anuncios

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

Categorías

A %d blogueros les gusta esto: