Java User Group Torino

English spoken people, click here
AltriJug
Articoli
Blog
Bookmarks
ChiSiamo
Cinema
Eventi
FAQ
IscriversiAlJug
FunnyJug
HobbiesAndSports
ImparareNuoveCose
JavaJobs
JavaTraining
Libri
MailingList
Meeting
News
ProgettiAttivita
Shop
Software
StoriaDelJug
SunItalia

RSS Feed
RSS Meetings Feed


I have joined Anti-IF Campaign


Spread Firefox Affiliate Button




Logo Csp

Logo Louis Urban



CoordinamentoJug
PagineDiServizio
Manutenzione
Singleton

Intento
Assicura che una classe sia instanziata una volta soltanto all'interno di un programma (o VM, o ClassLoader?), e fornisce un unico punto di accesso ad essa.

Descrizione


Da notare che il costruttore di un Singleton non deve essere accessibile (public). In questo modo l'oggetto può essere instanziato soltanto attraverso un metodo statico che permette di accedere all'unica istanza della classe: getInstance() o, in questo caso, getUniqueInstance?().

Benefici

  • Accesso controllato all'unica instanza
  • Spazio di nomi ridotti, evita di dichiarare variabili globali.
  • Permette un raffinamento delle operazioni e rappresentazioni
  • Permette un variabile numero di istanze, senza che ciò impatti col resto del codice.
  • Più flessibile delle operazioni di classe (metodi statici): non possono essere metodi astratti, e quindi non possono essere estesi. Inoltre è impossibile avere un riferimento al singleton.
  • Permette di avere un basso numero di oggetti utilizzati in condivisione anziché creare nuove istanze ogni volta, o per ogni utente.
Quando utilizzarlo
  • Ci deve essere solo una istanza di una classe.
Osservazioni
  • In un ambiente multi-utente o multi-thread, il singleton dev'essere reso thread safe.
Esempio



public class Client {   
   public static void main(String args[]) {      
      Singleton.getInstance().sayHello();      
      LazySingleton.getInstance().sayHello();      
   }   
}



public class Singleton {
   
   private static Singleton self = new Singleton();
   
   private Singleton() {};
   
   public static Singleton getInstance() { return self; }
   
   public void sayHello() { System.out.println("Hello...")}
   
}



//Singleton con lazy instantiation

public class LazySingleton {
   
   private static LazySingleton instance;
   
   private LazySingleton() {};
   
   public static LazySingleton getInstance() {
      if (instance == null)
        instance = new LazySingleton();
      return instance; 
   }
   
   public void sayHello() { System.out.println("Hello...")}
   
}




Singleton is mentioned on: CreationalPatterns

VQWiki includes notification systems; however, you have not yet become a member.



VeryQuickWiki Version 2.7.1 | Admin

Powered by:
Logo Csp Logo Louis Urban

Content of this site is Copyright (C) 2003 JUG Torino and its members. Java and all Java based trademarks and logos are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries. Other trademarks are registered by respective owners.