Come funziona un singleton

Tutto e' scritto in modo da non permettervi di instanziare piu' di un oggetto SingleCounter.A questo oggetto potete accedere solo usando il metodo instance che ritorna il suo indirizzo.
Notate che la classe SingleCounter e' dichiarata final per cui non la potete estendere e magari aggiungervi i vostri costruttori.
Il costruttore predefinito SingleCounter() viene dichiarato private cio' che vi impedisce di creare altre istanze. Questo metodo e' anche static cosi' esso puo' subito, quando inizia l'esecuzione del programma creare l'unica copia del singleton e renderla disponibile al metodo statico instance. Notate che getValue non e' statico, per cui non potete accedere ad esso usando la sintassi: Singlecounter.getValue(): dovete necessariamente accedere ad esso scrivendo:
SingleCounter pippo=SingleCounter.instance(); pippo.getValue();
o anche SingleCounter.instance().getValue();
Lo stesso vale per il metodo increment. Questo esempio spiega anche come mai per accedere a certi oggetti in Java, non si usa la solita tecnica di instanziare l'oggetto con new e poi accedervi, ma si usa la chiamata a un metodo statico della stessa classe.Questo succede tutte le volte che la creazione dei nuovi oggetti deve seguire certe regole (come il fatto che ci sia un unico oggetto). Una maniera analoga di raggiungere lo stesso scopo e' quella di permettere la creazione di un oggetto solo attraverso la chiamata di un particolare metodo di un'altra classe.Ad esempio la creazione di un oggetto Image in un applet viene fatta richiamando il metodo createImage() dello stesso applet.