2010-03-02 4 views
5

Come limitare la creazione di oggetti a non più di 3 nella classe Java?Come limitare la creazione di oggetti a non più di 3 nella classe Java?

Puoi darmi un'idea di come posso farlo?

+2

Ti riferisci a un modello di progettazione erm, tripleton? Come in, esattamente tre esempi di una determinata classe? –

+0

Non capisco esattamente qual è il tuo problema ... – romaintaz

+3

Sembra essere un compito comune/domanda in qualche corso. Ho visto la domanda molte, molte volte (quasi sempre con il numero 3) e devo ancora vedere una buona ragione per questa restrizione. –

risposta

7

Installa la tua classe tramite una fabbrica (vedi schemi di progettazione) e limitala a 3 istanze utilizzando un contatore semplice.

+0

contatore statico semplice e il metodo di fabbrica è sincronizzato. –

1

Il modello di fabbrica è la strada da percorrere. Oppure è possibile utilizzare un contatore statico. È necessario prestare attenzione alla sicurezza del filo.

1

Si può anche dare un'occhiata a ObjectPool di Apache Commons. Il codice sorgente è liberamente disponibile ...

7

possiamo limitare la creazione di oggetti per una particolare classe piccola modifica in Singleton design pattern come qui sotto:

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); 
     } 
} 

uscita di codice sopra è come:

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

Dopo la creazione di tre oggetti diversi, si ripete lo stesso 3 ° oggetto ancora e ancora. Non sta creando l'oggetto diverso.

0

perché non assegnare limInstance = null; in caso contrario in getLimInstance()? in tal caso non fornirà duplicati obj3?

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); 
    } 

}

risultato è stato questo:

[email protected]

[email protected]

[email protected]

null

nullo

nullo

[email protected]

0

È necessario modificare Singleton e creare tre objects.ans scrivere tre metodo in ogni oggetto metodo di ritorno come come ritorno diverse tre oggetti e utilizzare quando necessario. l'uso principale non è necessario dichiarare variabile o oggetto come statico, poiché restituisce sempre lo stesso oggetto.

Problemi correlati