Ci sono vari modi possibili per garantire che una classe abbia sempre e solo un singolo oggetto, e quindi vietare la creazione di più di un oggetto della classe. Tutti richiedono che la classe abbia un costruttore privato, altrimenti il costruttore si potrebbe chiamare ovunque per generare una quantità qualsiasi di oggetti.
public class Unico {
private Unico() {
}
…
}
La creazione dell'oggetto Unico può quindi avvenire solo all'interno della classe Unico, in un metodo. Questo metodo deve essere statico, altrimenti per essere chiamato dall'esterno richiederebbe un oggetto di invocazione.
public class Unico {
private Unico() {
}
public static Unico creaUnico() {
if (…) // esiste già un oggetto Unico
return …;
Unico unico = new Unico();
return unico;
}
}
Uno dei modi possibili per garantire l'unicità è quello di mantenere questo oggetto unico in una variabile statica, dato che di variabile statica ne esiste una sola per ogni classe e non una per ogni oggetto.
public class Unico {
private static unico;
private Unico() {
}
public static Unico creaUnico() {
if (unico != null)
return unico;
unico = new Unico();
return unico;
}
}
L'oggetto unico si trova chiamando il metodo statico:
Unico u = Unico.creaUnico();