viernes, 15 de abril de 2016

Patrones de Diseño Creacionales Parte 3

5. Singleton: Se asegura de que sólo exista una instacia de esa clase, si varios objetos utilizan esta instancia, siempre será la misma para cualquiera de ellos. El objetivo de este patrón es que habrá ocasiones en que una clase sólo requiera de una instancia única, algunos dicen que el patrón singleton es la mejora a las variable globales, lo cual así creo. Este patrón regularmente se usa para el manejo de recursos. Estos recursos pueden ser externos como internos, por mencionar un ejemplo de externo sería una clase que maneje el uso de conexiones a base de datos. Mientras que uno interno sería llevar el control de algunos eventos que ocurren durante la ejecución del programa los cuales podrían ser errores, estadísticas, etc. Como podemos ver en el diagrama de clase de clase.
Diagrama UML
Ejemplo
El ejemplo del patrón realiza una conexión a base de datos mysql para hecer un select de un tabla.
Creamos la clase ConnectDB que utilizaremos para crear el patrón.

  1. package com.elkardumen.conexion;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;

    public class ConnectDB {

     private static Connection connect;
     private static ConnectDB instance;

     private ConnectDB() {

     try {

    Class.forName("com.mysql.jdbc.Driver");
     // connect DB
     connect = DriverManager.getConnection("jdbc:mysql://127.0.0.1/MyDataBase","root", "");
    }

     catch (SQLException e) {
    System.err.println(e.getMessage());

    }

     catch (ClassNotFoundException e) {
    System.err.println(e.getMessage());
    }
    }

     public static ConnectDB getInstance() {
     //Esto servira para que solo se haga una vez garantizando el patron singleton
     if (instance == null) {
  2. System.out.println("Se crea la instancia solo una vez garantizanco el patron Singleton");
     instance = new ConnectDB();
    }

     return instance;

    }

     public static Connection getConnect() {
     return connect;
    }

     public static void setConnect(Connection connect) {
    ConnectDB.connect = connect;
    }


Creamos la clasePrincipal con el siguiente código:

  1. package com.elkardumen;

    import java.sql.ResultSet;
    import java.sql.Statement;

    import com.elkardumen.conexion.ConnectDB;

    public class Principal {

     /**
    * @param args
    */
     public static void main(String[] args) {
     try{
     //Creamos El primer llamado
    ConnectDB con = ConnectDB.getInstance();
    Statement stmt = con.getConnect().createStatement();
    String query = "select * from micatalogo;" ;
    ResultSet rs = stmt.executeQuery(query) ;
     while (rs.next())
    {
    System.out.println (rs.getInt (1) + " - " + rs.getString (2)+ " - " + rs.getString(3));
    }
     //Creamos El segundo llamado
    ConnectDB con2 = ConnectDB.getInstance();
    Statement stmt2 = con2.getConnect().createStatement();
    rs = stmt.executeQuery(query) ;
     while (rs.next())
    {
    System.out.println (rs.getInt (1) + " - " + rs.getString (2)+ " - " + rs.getString(3));
    }
    }catch(Exception e){
    e.printStackTrace();
    }


    }


    }



No hay comentarios:

Publicar un comentario