Un piccolo grande Singleton

Il singleton, forse il più semplice dei pattern, ma non è detto che implementarlo sia così semplice e che soprattutto ciò venga ben fatto.  Per i meno esperti ricordiamo che il Singleton è un pattern creazionale di fondamentale importanza ed è stato introdotto dalla GoF. Questo serve a garantire che di un determinato oggetto esisti solo una istanza e che questa abbia un punto di accesso unico.

Recentemente su onjava.com è uscito questo articolo che consiglia la seguente implementazione:

public class Singleton {
private Singleton(){}
static class SingletonHolder {
static Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
}

contro la classica implementazione:
public class Singleton {
private Singleton(){}
static Singleton instance;
public static synchronized Singleton getInstance() {
if (instance == null) instance = new Singleton();
return instance;
}
}

Viene consigliata questa implementazione perchè a differenza delle altre implementa bene il meccanismo di Lazy Loading (cioè caricare in memoria solo quello che serve e quando serve). Questo avviene perchè l’oggetto non viene istanziato fino a quando non viene chiamato il suo costruttore e venendo questo chiamato all’interno di una inner class static questo avverrà solamente quando verrà chiamato per la prima volta il metodo getInstance() della classe Singleton. Altro motivo è avere una implementazione comunque thread-safe ma che non usi metodi definiti come syncronized perchè molto onerosi dal punto di vista prestazionale e perchè la necessità di avere il metodo syncronized definito come tale è veramente poco frequente.

Annunci

~ di jesty su febbraio 2, 2007.

4 Risposte to “Un piccolo grande Singleton”

  1. sta implementazione gia l’ho vista… cos’era isiawebbee???

  2. non so di cosa tu stia parlando 🙂

  3. mmm.. pensavo che il post fosse del cerbo 😉

  4. io non so chi sia il Cerbo, non sono così avanti da sapere chi sono 🙂

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

 
%d blogger hanno fatto clic su Mi Piace per questo: