¿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?
¿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?
Instancia tu clase a través de una fábrica (ver patrones de diseño) y limitala a 3 instancias usando un contador simple.
contador estático simple y tiene el método de fábrica sincronizado. –
Necesita Singleton modificado. Ver esto - el mismo OOPS (Design Patterns)
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.
También puede echar un vistazo a ObjectPool de Apache Commons. El código fuente está disponible libremente ...
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.
¿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:
nulo
nula
nula
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.
¿Te refieres a un patrón de diseño erm, tripleton? Como en, exactamente tres instancias de una clase dada? –
No entiendo cuál es tu problema exactamente ... – romaintaz
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. –