Originariamente inviato da poppoGBR
in questo modo se instanzio un oggetto X di quella classe sul main....da dentro qualsiasi altro oggetto di Y potrò accedervi???? anche se questo oggeto Y non è istanziato sul main?
Trattandosi di un Singleton tu hai un unico oggetto al quale puoi accedere da ogni classe semplicemente richiamando:
TuoSingleton sing = TuoSingleton.getInstance();
Così facendo lavori sempre e solo sullo stesso oggetto. Ad esempio:
Codice PHP:
public class Singleton {
// private: non viene generato un costruttore pubblico
private Singleton() {}
private String variabile = "";
public String getVariabile(){
return variabile;
}
public void setVariabile(String value){
this.variabile = value;
}
/**
* La classe Contenitore viene caricata alla prima esecuzione del getInstance()
* o al primo accesso a Contenitore.ISTANZA, non prima, e in modo serializzato
*/
private static class Contenitore {
private final static Singleton ISTANZA = new Singleton();
}
public static Singleton getInstance() {
return Contenitore.ISTANZA;
}
}
E in due classi distinte:
Codice PHP:
public class ClasseCheSetta {
....
Singleton sing = Singleton.getInstance();
sing.setVariabile("Prova");
...
}
public class ClasseCheLegge{
...
System.out.println(Singleton.getInstance().getVariabile());
...
}
Per quanto riguarda i vantaggi dell'utilizzo di un singleton:
1) Consente di avere un accesso controllato all'unica istanza della classe
2) Spazio di nomi ridotto
3) Evita la dichiarazione di variabili globali
4) Consente 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.