In deze tutorial leren we met behulp van voorbeelden over het singleton-ontwerppatroon en hoe je dit in Java kunt toepassen.
Singleton is een ontwerppatroon in plaats van een kenmerk dat specifiek is voor Java. Het zorgt ervoor dat er slechts één instantie van een klasse wordt gemaakt.
Een ontwerppatroon is te vergelijken met onze codebibliotheek die verschillende coderingstechnieken bevat die door programmeurs over de hele wereld worden gedeeld.
Java Singleton
Hier is hoe we singletons in Java kunnen gebruiken.
- maak een
private
constructor die beperkt om een object buiten de klasse te maken - maak een
private
attribuut dat verwijst naar het singleton-object. - maak een
public static
methode waarmee we het object dat we hebben gemaakt kunnen maken en openen. Binnen de methode zullen we een voorwaarde creëren die ons ervan weerhoudt om meer dan één object te maken.
Hier is een voorbeeld.
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 ) )
In het bovenstaande voorbeeld
private static SingletonExample singleObject
- een verwijzing naar het object van de klas.private SingletonExample()
- een private constructor die het maken van objecten buiten de klasse beperkt.public static SingletonExample getInstance()
- deze methode retourneert de verwijzing naar het enige object van de klasse. Omdat de methode statisch is, kan deze worden benaderd met behulp van de klassenaam.
Gebruik van Singleton Class
Singletons kunnen worden gebruikt tijdens het werken met databases. Ze kunnen worden gebruikt om een verbindingspool te maken om toegang te krijgen tot de database, terwijl dezelfde verbinding voor alle clients opnieuw wordt gebruikt. Bijvoorbeeld,
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(); ) )
Wanneer we het programma uitvoeren, is de uitvoer:
U bent nu verbonden met de database.
In ons bovenstaande voorbeeld,
- We hebben een database met een singleton-klasse gemaakt.
- Het dbObject is een klasseveld. Dit verwijst naar het object van de klasse Database.
- De private constructor
Database()
verhindert het maken van objecten buiten de klasse. - De statische class type methode
getInstance()
retourneert de instantie van de class naar de buitenwereld. - In de Main-klasse hebben we een klassetype variabele db1. We bellen
getInstance()
met db1 om het enige object van de database op te halen. - De methode
getConnection()
is alleen toegankelijk via het object van de database. - Omdat de database maar één object kan hebben, hebben alle clients toegang tot de database via een enkele verbinding.
Het is belangrijk op te merken dat er maar een paar scenario's zijn (zoals logboekregistratie) waarin eenlingen zinvol zijn. Zelfs een databaseverbinding zou gewoonlijk geen singleton moeten zijn.
We raden je aan om singletons helemaal niet te gebruiken als je niet zeker weet of je het wel of niet moet gebruiken. Meer informatie: wat is er zo erg aan Singleton?