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
private
costruttore che si limiti a creare un oggetto al di fuori della classe - creare un
private
attributo che faccia riferimento all'oggetto singleton. - creare un
public static
metodo 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?