English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

教程基础Java

Controllo di flusso Java

Array Java

Orientamento ad oggetti Java (I)

Orientamento ad oggetti Java (II)

Orientamento ad oggetti Java (III)

Gestione delle eccezioni Java

List Java

Queue (coda) Java

Map collection Java

Set collection Java

Input/Output (I/O) Java

Reader/Writer Java

Altri argomenti Java

Modello Singleton Java

In questo tutorial, impareremo il design pattern Singleton e come applicarlo in Java con esempi.

Singleton (singolo) è un design pattern, non una funzione specifica di Java. Assicura che venga creato solo un'istanza della classe.

Il design pattern è come la nostra libreria di codice, che contiene una varietà di tecniche di codifica condivise da programmatori di tutto il mondo.

Modello Singleton Java

Ecco come possiamo utilizzare il singleton in Java.

  • Crea un costruttore privato che limita la creazione di oggetti al di fuori della classe.

  • Crea un attributo privato di riferimento all'oggetto singleton.

  • Crea un metodo public static che ci permette di creare e accedere all'oggetto che abbiamo creato. All'interno del metodo, creeremo una condizione per limitare la creazione di più oggetti.

Questo è un esempio.

class SingletonExample {
    //Riferimento al campo privato dell'oggetto
   private static SingletonExample singleObject;
   private SingletonExample() {
       //Costruttore della classe SingletonExample
   }
   public static SingletonExample getInstance() {
        //Scrivi il codice che ci permette di creare un solo oggetto
        //Accedi all'oggetto secondo necessità
   }
}

Nell'esempio sopra,

  • private static SingletonExample singleObject - Riferimento all'oggetto della classe.

  • private SingletonExample() - Costruttore privato, utilizzato per limitare la creazione di oggetti al di fuori della classe.

  • public static SingletonExample getInstance() - Questo metodo restituisce un riferimento all'unico oggetto della classe. Poiché questo metodo è statico, può essere acceduto utilizzando il nome della classe.

Utilizzare la classe singleton

Puoi utilizzare l'unico esempio quando utilizzi il database. Possono essere utilizzati per creare un pool di connessioni per accedere al database, e per riutilizzare la stessa connessione per tutti i client. Ad esempio,

class Database {
   private static Database dbObject;
   private Database() {      
   }
   public static Database getInstance() {
      //Crea l'oggetto (se non è già stato creato)
      if(dbObject == null) {
         dbObject = new Database();
      }
       //Restituisce l'oggetto singleton
       return dbObject;
   }
   public void getConnection() {
       System.out.println("Ora è stata stabilita la connessione al database.");
   }
}
class Main {
   public static void main(String[] args) {
      Database db1;
      //Riferimento all'oggetto unico del Database
      db1= Database.getInstance();
      
      db1.getConnection();
   }
}

Quando eseguiamo il programma, l'output sarà:

Ora siamo connessi al database.

Nell'esempio sopra,

  • Abbiamo creato una classe singleton Database.

  • dbObject è un campo di tipo di classe. Questo referenzirà l'oggetto della classe Database.

  • Il costruttore privato Database(), può prevenire la creazione di oggetti al di fuori della classe.

  • Il metodo statico di tipo di classe getInstance() restituisce l'istanza della classe all'esterno.

  • Nel Main, abbiamo una variabile di tipo di classe db1. Stiamo utilizzando db1 per chiamare getInstance() per ottenere l'oggetto unico Database.

  • Il metodo getConnection() può essere utilizzato solo per accedere all'oggetto Database.

  • Poiché Database può avere solo un oggetto, tutti i client possono accedere al database tramite una singola connessione.

Deve essere notato che solo in alcune circostanze (come i log) il singleton ha senso. Persino le connessioni database non dovrebbero essere solitamente singleton.

Se non sei sicuro di utilizzare il singleton, ti consigliamo di evitare di utilizzare il singleton completamente.