Creazione di un singleton in java

In questo articolo spiego come creare un oggetto di una classe java una e una volta sola in modo che all’interno dell’applicazione sia disponibile un’unica istanza.
Un oggetto di questo tipo è detto singleton e una classe base può essere la seguente:

Nota i seguenti aspetti della classe Singleton:

  • una variabile “instance” di tipo Singleton e con modificatore static cioè condivisa fra tutte le istanze della classe e già inizializzata a null anche in assenza di istanze della classe
  • un costruttore con modificatore private quindi non utilizzabile dall’esterno della classe; l’importanza di questo costruttore non è quello che fa (non fa nulla) ma il fatto che ci sia, per cui il compilatore java non crea un costruttore pubblico di default e quindi non è possibile creare un oggetto Singleton con l’istruzione “new Singleton();”
  • un metodo “getInstance” con modificatori public e static quindi utilizzabile dall’esterno anche in assenza di un oggetto Singleton, ed è l’unico modo per creare una istanza di Singleton, usa il costruttore privato se e solo se la variabile “instance” è null; ha anche il modificatore synchronized per impedire l’accesso contemporaneo ed evitare la creazione di più istanze la prima volta
  • l’oggetto “Singleton” è creato solo dopo la chiamata a “getInstance” cioè solo quando è richiesto per la prima volta; questa modalità è detta lazy initialization
  • per completezza riporto anche il metodo “clone”, come descritto in Introducing the singleton – The Single Java Object; nell’esempio riportato è inutile perche la classe Singleton non implementa Cloneable quindi il metodo clone lancerebbe comunque l’eccezione CloneNotSupportedException;
    la sua implementazione diventerebbe importante se la classe Singleton estendesse un’altra classe che implementa Cloneable e anche il metodo clone, sovrascrivendolo nuovamente in modo da impedire la copia dell’oggetto
  • tieni presente che ogni classe che estende Singleton non eredita la variabile “instance” perchè privata e qualsiasi costruttore anche se pubblico

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.