Design semplice per funzione Singleton in java per Kernel [chiuso]

1

Capisco che Singelton aiuti a creare un'istanza di una sola classe ALLA VOLTA. Cerco di imparare come progettare per la funzione Singleton in java. Voglio saperlo meglio per capire il kernel. Quindi provo a farlo in questo modo, ma mi piacerebbe sapere se è l'unico modo per creare un costruttore privato.

public class Singleton {
    private static Singleton instance = null;

    private Singleton() {   }

    public static synchronized Singleton getInstance() {
        if (instance == null) {
                    instance = new Singleton ();
        }
        return instance;
    }
}
    
posta KJC2009 11.04.2014 - 00:00
fonte

3 risposte

1

Sì, per creare una classe Singleton, devi usare il costruttore privato poiché è l'unico modo per impedire a un'altra classe di creare un'istanza della tua classe.

public class Singleton {
private static Singleton instance = null;

private Singleton() {   }

public static synchronized Singleton getInstance() {
    if (instance == null) {
                instance = new Singleton ();
    }
    return instance;
}

}

    
risposta data 12.04.2014 - 09:28
fonte
2

sui più grandi fraintendimenti che vedo è che per tutti i singleton è necessaria l'istanziazione pigra, non lo è.

Java ha il proprio caricamento lazy delle classi che permetterà l'istanziazione lazy quando la classe è prima necessaria:

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

    private Singleton() {   }

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

spesso questo è tutto ciò che serve per l'istanziazione lazy di un singleton in java

    
risposta data 11.04.2014 - 09:56
fonte
0

Se comprendo correttamente la tua domanda, allora sì, per creare una classe Singleton, devi usare il costruttore privato poiché è l'unico modo per impedire a un'altra classe di creare un'istanza della tua classe.

Se la tua domanda è un altro modo per aggirare getInstance (), allora è anche possibile usare una classe interna statica privata e usarla per memorizzare il riferimento come in questa domanda relativa a android .

public class Singleton {

    private Singleton() {}

    public static synchronized Singleton getInstance() {
        return Implementation.INSTANCE;
    }

    private static class Implementation {
        public static final Singleton INSTANCE = new Singleton();
    }
}
    
risposta data 11.04.2014 - 06:56
fonte

Leggi altre domande sui tag