Bien su suplica se ha hecho realidad y para ejemplificar utilizaré Java
En realidad este patrón es muy simple. La idea básica de este patrón es que solo pueda existir una instancia de una clase en la aplicación.
El primer paso para conseguir este patrón es bloquear la forma de generar instancias de la clase, esto se hace simplemente privatizando el constructor de la clase
public class Singleton{
}
|
Así que utilizando la potencia de los miembros estáticos crearemos una instancia estática de la clase para que viva durante toda la vida de la aplicación.
|
Ahora solo falta tener alguna forma de acceder a este objeto, y esto es mediante un método estático
= new Singleton() ;
singleton
; |
Cuando utilizar el patrón Singleton
La forma mas utilizada para aplicar este patrón, es para la capa de acceso a datos. Generalmente por cada operación que necesitemos hacer con la base de datos, creamos una nueva conexión, nos autentificamos y en seguida mandamos las sentencias SQL que necesitemos ejecutar.
Si aplicamos un patrón Singleton a la conexión a la base de datos y mantenemos la conexión abierta, nos evitaremos abrir y cerrar la conexión por cada petición
A continuación pongo un pequeño ejemplo de la aplicación de este patrón
Clase ConnectionDao
private static ConnectionDao connectionDao; private Connection connection;
private
ConnectionDao() throws ExceptionInInitializerError{ String url = "..."; Class.forName(classDriver).newInstance(); connection = DriverManager.getConnection(url); } catch (Exception ex) { throw new ExceptionInInitializerError(ex); } public PreparedStatement getPreparedStatement(String query) throws SQLException{ }
|
El constructor se encarga de establecer la conexión a la base de datos, pero esta no se cierra para dejar el canal de comunicación siempre abierto.
El método estático getInstance() es el encargado de crear la instancia de la clase ConnectionDao si esta no existe y de regresar una referencia a dicha instancia
Clase UsuarioDao
try { String sql = "insert ..."; ConnectionDao.getInstance().executeNonQuery(sql); } catch (SQLException ex) { ... } } public void buscar(String... datos){ try { String sql = "select ..."; ConnectionDao connection = ConnectionDao.getInstance(); connection.executeQuery(sql); } catch (SQLException ex) { ... } } public void actualizar (String... datos){ try { String sql = "update ..."; ConnectionDao connection = ConnectionDao.getInstance(); PreparedStatement prepared = connection.getPreparedStatement(sql); prepared.setString(1,datos) prepared.executeUpdate(); } catch (SQLException ex) {
... } } |
Así para obtener la referencia al objeto ConectionDao llamamos al método ConnectionDao.getInstance(); que nos dará acceso a los metodos " executeQuery", " executeNonQuery " y "
getPreparedStatement
"De esta manera concluye este pequeño tutorial sobre el patrón Singleton, si tienen alguna duda o un comentario, no duden en dejarlo e intentaré atenderlo lo mas pronto posible
Un Saludo
Qué hay Hugo.
ResponderEliminarMe falta leer con un poco más de detenimiento tu nueva aportación, pero de entrada está muy bien.
Por otro lado, en cuanto a la parte del diseño del blog y a mi manera de ver, deberías asegurarte que sólo una porción de cada publicación salga en la página principal, con el objetivo de facilitar la legibilidad de la misma.
Saludos y excelente esfuerzo.
Listo Eliel!! gracias por el tip
ResponderEliminarSaludos!
ResponderEliminarEn que momento es recomendable cerrar la conexion?