Java Singleton (con esempio)

In questo tutorial, impareremo a conoscere il modello di progettazione singleton e come applicarlo in Java con l'aiuto di esempi.

Singleton è un modello di progettazione piuttosto che una funzionalità specifica di Java. Assicura che venga creata solo un'istanza di una classe.

Un modello di progettazione è come la nostra libreria di codici che include varie tecniche di codifica condivise dai programmatori di tutto il mondo.

Java Singleton

Ecco come possiamo usare i singleton in Java.

  • creare un privatecostruttore che si limiti a creare un oggetto al di fuori della classe
  • creare un privateattributo che faccia riferimento all'oggetto singleton.
  • creare un public staticmetodo che ci consenta di creare e accedere all'oggetto che abbiamo creato. All'interno del metodo creeremo una condizione che ci impedisce di creare più di un oggetto.

Ecco un esempio.

 class SingletonExample ( // private field that refers to the object private static SingletonExample singleObject; private SingletonExample() ( // constructor of the SingletonExample class ) public static SingletonExample getInstance() ( // write code that allows us to create only one object // access the object as per our need ) ) 

Nell'esempio sopra,

  • private static SingletonExample singleObject - un riferimento all'oggetto della classe.
  • private SingletonExample() - un costruttore privato che limita la creazione di oggetti al di fuori della classe.
  • public static SingletonExample getInstance()- questo metodo restituisce il riferimento all'unico oggetto della classe. Poiché il metodo statico, è possibile accedervi utilizzando il nome della classe.

Uso della classe Singleton

I singleton possono essere utilizzati mentre si lavora con i database. Possono essere utilizzati per creare un pool di connessioni per accedere al database riutilizzando la stessa connessione per tutti i client. Per esempio,

 class Database ( private static Database dbObject; private Database() ( ) public static Database getInstance() ( // create object if it's not already created if(dbObject == null) ( dbObject = new Database(); ) // returns the singleton object return dbObject; ) public void getConnection() ( System.out.println("You are now connected to the database."); ) ) class Main ( public static void main(String() args) ( Database db1; // refers to the only object of Database db1= Database.getInstance(); db1.getConnection(); ) ) 

Quando eseguiamo il programma, l'output sarà:

 Ora sei connesso al database. 

Nel nostro esempio sopra,

  • Abbiamo creato un database di classi singleton.
  • Il dbObject è un campo di tipo classe. Questo farà riferimento all'oggetto della classe Database.
  • Il costruttore privato Database()impedisce la creazione di oggetti al di fuori della classe.
  • Il metodo del tipo di classe statica getInstance()restituisce l'istanza della classe al mondo esterno.
  • Nella classe Main, abbiamo la variabile del tipo di classe db1. Stiamo chiamando getInstance()using db1 per ottenere l'unico oggetto del database.
  • È getConnection()possibile accedere al metodo solo utilizzando l'oggetto del database.
  • Poiché il database può avere un solo oggetto, tutti i client possono accedere al database tramite un'unica connessione.

È importante notare che ci sono solo pochi scenari (come la registrazione) in cui i singleton hanno senso. Anche una connessione al database di solito non dovrebbe essere un singleton.

Ti consigliamo di evitare completamente l'uso di singleton se non sei sicuro se usarlo o meno. Per saperne di più: cosa c'è di così male in Singleton?

Articoli interessanti...