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 un siffatto comportamento è necessario avvalersi dello specificatore 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.
Vediamo un esempio in Java:
public class Singleton
{
private static Singleton istanza;
private Singleton()
{
}
public static Singleton getInstance()
{
if (istanza == null)
{
istanza = new Singleton();
}
return istanza;
}
public void helloWorld()
{
System.out.println("Hello World");
}
}
public class usaSingleton
{
public static void main(String args[])
{
Singleton.getInstance().helloWorld();
}
}
Come si può notare dal codice, il costruttore della classe Singleton è stato definito con access specifier private e, in tal modo, l'unico punto di accesso alla classe per il mondo esterno viene fornito attraverso il metodo statico getInstance() che si occupa di restituire (creandola prima se non è mai stata creata) l'unica istanza della classe.
Quando usare la classe Singleton
Il lettore critico potrebbe domandarsi, giustamente, quando possa rivelarsi utile avvalersi dei singleton. 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.
Implementare una classe singleton
Ecco come si implementa una classe singleton in alcuni dei linguaggi orientati agli oggetti per il web.