mercoledì 6 novembre 2013

Q39

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:

Nessun commento:

Posta un commento