Which two properly implement a Singleton
pattern?
A.
class Singleton {
private static Singleton instance;
private Singleton() {
}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
B.
class Singleton {
private static Singleton instance = new Singleton();
protected Singleton() {
}
public static Singleton
getInstance() {
return instance;
}
}
C.
class Singleton {
Singleton()
{
}
private static class
SingletonHolder {
private static final Singleton
INSTANCE = new Singleton();
}
public static Singleton
getInstance() {
return
SingletonHolder.INSTANCE;
}
}
D.
enum Singleton {
INSTANCE;
}
La risposta è A e D
Il singleton rappresenta un tipo particolare
di classe che garantisce che soltanto un’unica istanza della classe stessa
possa essere creata all’interno di un programma.
Per ottenere questo comportamento è necessario
avvalersi del modificatore di accesso private anche per il costruttore della
classe (cosa che generalmente non viene mai praticata in una classe standard)
ed utilizzare un metodo statico che consenta di accedere all’unica istanza
della classe.
In generale, la scelta del singleton viene
effettuata in tutti quei casi in cui è necessario che venga utilizzata una sola
istanza di una classe.
Ciò consente di:
- Avere un accesso controllato all’unica istanza
della classe
- Avere uno spazio di nomi ridotto
- Evitare la dichiarazione di variabili globali
- Assicurarsi di avere un basso numero di oggetti
utilizzati in condivisione grazie al fatto che viene impedita la creazione di
nuove istanze ogni volta che si voglia utilizzare la stessa classe.
Un altro approccio è quello di usare un enumeratore.
Questo approccio sfrutta il fatto che le costanti enum sono costruite la prima volta che si utilizza una classe.
A.
Questo codice realizza
un Singleton pattern.
B.
Il modificatore del
costruttore è protected e quindi non si
realizza il Singleton pattern.
C.
Il modificatore del costruttore
è default e quindi non si realizza il Singleton pattern.
D.
Questo codice realizza un Singleton pattern utilizzando ENUM.
Riferimenti: