2013-02-22 13 views
14

Ho sviluppato singleton in molti modi a seconda delle condizioni come volatile/lazy singleton, singleton singleton, singleton normale e tramite Enum, ma in particolare desidero conoscere il singleton del pattern static holder mostrato di seguito.Riguardo al modello di singleton del supporto statico

public static class Singleton { 
    private static class InstanceHolder { 
     public static Singleton instance = new Singleton(); 
    } 

    private Singleton(){} 

    public static Singleton getInstance() { 
     return InstanceHolder.instance; 
    } 
} 

Si prega di indicare in quali condizioni è vantaggioso e quali sono i vantaggi.

+0

Un sacco di domande su questo già, ma una buona ragione per non usare i singleton è difficile da verificare. – vikingsteve

+3

L'implementazione non è corretta. L'istanza dovrebbe essere definitiva. – jdb

+3

Sì, infatti 'instance' può essere effettivamente' finale statico privato '. – vikingsteve

risposta

2

Questo è un modo per creare un singleton lazy thread-safe sfruttando il modo in cui JVM carica le classi. Puoi leggere ulteriori informazioni sul perché e su come implementarlo correttamente nel libro Effective Java di Bloch.

Ricordare che dal punto di vista del punto di vista testable code singleton (e lo stato globale in generale) non sono utili e dovrebbero essere evitati.

41

Questo modello è utile per almeno 3 motivi:

  1. fabbrica Statico
  2. inizializzazione differita sicuro
  3. Discussione

La JVM rinvia l'inizializzazione della classe InstanceHolder fino a quando non viene effettivamente utilizzato e poiché Singleton è inizializzato con un inizializzatore statico, non è necessaria alcuna sincronizzazione aggiuntiva. La prima chiamata a getInstance da qualsiasi thread fa sì che InstanceHolder venga caricato e inizializzato, momento in cui l'inizializzazione di Singleton avviene tramite l'inizializzatore statico.

Il modello di supporto statico è anche considerato la sostituzione più intelligente per l'antipattern a doppio controllo.

+4

+1 Per rispondere effettivamente alla domanda OP di "quali sono i vantaggi". –

Problemi correlati