2010-03-02 18 views
5

¿Cómo restrinjo la creación de objetos no más de 3 en la clase Java?¿Cómo restrinjo la creación de objetos no más de 3 en la clase Java?

¿Me puede dar una idea de cómo puedo hacerlo?

+2

¿Te refieres a un patrón de diseño erm, tripleton? Como en, exactamente tres instancias de una clase dada? –

+0

No entiendo cuál es tu problema exactamente ... – romaintaz

+3

Parece ser una tarea/pregunta común en algún curso. He visto la pregunta muchas, muchas veces (casi siempre con el número siendo 3) y todavía no veo una buena razón para esta restricción. –

Respuesta

7

Instancia tu clase a través de una fábrica (ver patrones de diseño) y limitala a 3 instancias usando un contador simple.

+0

contador estático simple y tiene el método de fábrica sincronizado. –

1

El patrón de fábrica es el camino a seguir. O se puede usar un contador estático. Necesito tener cuidado con la seguridad del hilo.

1

También puede echar un vistazo a ObjectPool de Apache Commons. El código fuente está disponible libremente ...

7

Podemos restringir la creación de objetos de una clase particular de pequeña modificación en el patrón de diseño Singleton de la siguiente manera:

public class LimitClass { 

    private static LimitClass limInstance; 
    public static int objCount = 0; 

    private LimitClass(){ 
     objCount++; 
    } 

    public static synchronized LimitClass getLimInstance(){ 
     if(objCount < 3){ 
      limInstance = new LimitClass(); 
     } 
     return limInstance; 
    } 
} 

public class LimitObjectCreationTest { 

    public static void main(String[] args) { 

     LimitClass obj1 = LimitClass.getLimInstance(); 
     LimitClass obj2 = LimitClass.getLimInstance(); 
     LimitClass obj3 = LimitClass.getLimInstance(); 
     LimitClass obj4 = LimitClass.getLimInstance(); 
     LimitClass obj5 = LimitClass.getLimInstance(); 
     LimitClass obj6 = LimitClass.getLimInstance(); 

     System.out.println(obj1); 
     System.out.println(obj2); 

     System.out.println(obj3); 
     System.out.println(obj4); 
     System.out.println(obj5); 
     System.out.println(obj6); 
     } 
} 

salida del código anterior es como:

[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 

Después de la creación de tres objetos diferentes, se repite el mismo 3er objeto una y otra vez. No está creando el objeto diferente.

0

¿por qué no asignar limInstance = null; en caso contrario en getLimInstance()? en ese caso, ¿no proporcionará obj3 duplicados?

public static synchronized InstanceClass getLimInstance() 
{ 
     if(objCount < 3){ 
      limInstance = new InstanceClass(); 
     } 
     else 
     { 
      limInstance=null; 
     } 
     return limInstance; 
    } 


public class LimitObjectCreationTest { 


    public static void main(String[] args) { 
    InstanceClass obj1 = InstanceClass.getLimInstance(); 
    InstanceClass obj2 = InstanceClass.getLimInstance(); 
    InstanceClass obj3 = InstanceClass.getLimInstance(); 
    InstanceClass obj4 = InstanceClass.getLimInstance(); 
    InstanceClass obj5 = InstanceClass.getLimInstance(); 
    InstanceClass obj6 = InstanceClass.getLimInstance(); 

    System.out.println(obj1); 
    System.out.println(obj2); 

    System.out.println(obj3); 
    System.out.println(obj4); 
    System.out.println(obj5); 
    System.out.println(obj6); 

    System.out.println(obj3); 
    } 

}

El resultado fue el siguiente:

[email protected]

[email protected]

[email protected]

nulo

nula

nula

[email protected]

0

Es necesario modificar Singleton y crear tres objects.ans escribir tres método en cada objeto de retorno método similar como retorno diferentes tres objetos y usar cuando lo necesites su uso principal no es necesario declarar variable u objeto como estático, porque siempre devuelve el mismo objeto.

Cuestiones relacionadas