Foros del Web » Programación para mayores de 30 ;) » Java »

Duda usando singleton

Estas en el tema de Duda usando singleton en el foro de Java en Foros del Web. Hola, estoy resolviendo los ejercicios de Piensa en Java de Bruce Eckel y el problema dice asi.. Crear una clase denominada GestorConexion que gestione un ...
  #1 (permalink)  
Antiguo 18/02/2008, 23:54
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 21 años
Puntos: 60
Duda usando singleton

Hola, estoy resolviendo los ejercicios de Piensa en Java de Bruce Eckel y el problema dice asi..

Crear una clase denominada GestorConexion que gestione un Array Fijo de Objetos Conexion. El programador cliente no debe de ser capaz de crear explicitamente objetos Conexion, sino que solamente puede crear objetos a través de un método estatico de GestorConexion. Cuando el GestorConexion se quede sin objetos devolvera una referencia null. Probar las clases en main.. tip.. usar el patrón Singleton

Código PHP:
package c05.patrones;

class 
Conexion {
    
//Hacemos privado el constructor para poder instanciar con un método singleton
    
private Conexion(){
        
System.out.println("Me has creado");
    }
    static 
Conexion getInstance(){
        return new 
Conexion();
    }
}

public class 
GestorConexion {
    static 
int instancias=5;
    static 
Conexion[] ConexionesDisponibles = new Conexion[5];
    static 
Conexion getInstance(){
        if(
instancias<1){
            return 
null;
        }else{
            
instancias--;
            return 
ConexionesDisponibles[instancias].getInstance();
        }
    }
    public static 
void main(String[] args) {
        
GestorConexion.getInstance(); 
        
GestorConexion.getInstance(); 
        
GestorConexion.getInstance(); 
        
GestorConexion.getInstance(); 
        
GestorConexion.getInstance(); 
        
GestorConexion.getInstance(); 
        
GestorConexion.getInstance(); 
        
GestorConexion.getInstance(); 
        
GestorConexion.getInstance(); 
        
GestorConexion.getInstance(); 
        
GestorConexion.getInstance(); 
    }


Esto me da esta salida...

Código PHP:
Me has creado
Me has creado
Me has creado
Me has creado
Me has creado 
Osea quiere decir que solo segun yo se crearon solo 5 objetos conexion dado que aunque invoco muchos más solo he permitido la creacion de 5.. no se Pero presiento que no esta bien :s por que dice que hay que crear un metodo en GestorConexion.. para crear los objetos conexion.. pero si el constructor de Conexion es privado como puedo hacer referencia a el :s ,

alguna idea?
__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador

Última edición por _ssx; 19/02/2008 a las 01:21
  #2 (permalink)  
Antiguo 19/02/2008, 12:29
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Duda usando singleton

A mi me parece correcto la forma en que lo haces, aunque igual podrías investigar un poco el patrón Factory, serviría mucho para lo que estas intentando hacer, y mezclado con Singleton podrás hacerlo correctamente.

Saludos.
  #3 (permalink)  
Antiguo 19/02/2008, 12:42
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Duda usando singleton

De todas formas, ese no es el patron singleton. Singleton es para impedir que no se pueda crear nada mas que una instancia de una clase.

Lo que no acabo de ver claro es por que hace falta el metodo getInstance de Conexion. Y por otro lado, dado que Conexion no es una clase publica, ¿como van a usarla las clases cliente?

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:50.