I denne opplæringen vil vi lære om singleton-designmønsteret og hvordan du bruker det i Java ved hjelp av eksempler.
Singleton er et designmønster i stedet for en funksjon som er spesifikk for Java. Det sikrer at bare en forekomst av en klasse opprettes.
Et designmønster er som kodebiblioteket vårt som inkluderer forskjellige kodeteknikker som deles av programmerere over hele verden.
Java Singleton
Slik kan vi bruke singletoner i Java.
- lage en
private
konstruktør som begrenser å lage et objekt utenfor klassen - lage et
private
attributt som refererer til singleton-objektet. - lage en
public static
metode som lar oss lage og få tilgang til objektet vi opprettet. Inne i metoden vil vi lage en tilstand som begrenser oss fra å skape mer enn ett objekt.
Her er et eksempel.
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 ) )
I eksemplet ovenfor,
private static SingletonExample singleObject
- en referanse til klassens objekt.private SingletonExample()
- en privat konstruktør som begrenser oppretting av gjenstander utenfor klassen.public static SingletonExample getInstance()
- denne metoden returnerer referansen til det eneste objektet i klassen. Siden metoden er statisk, kan du få tilgang til den ved hjelp av kursnavnet.
Bruk av Singleton Class
Singletons kan brukes mens du arbeider med databaser. De kan brukes til å opprette en tilkoblingsgruppe for å få tilgang til databasen mens de bruker den samme forbindelsen for alle klienter. For eksempel,
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(); ) )
Når vi kjører programmet, vil utdataene være:
Du er nå koblet til databasen.
I eksempelet vårt ovenfor,
- Vi har laget en singleton-klasse Database.
- DbObject er et klassetypefelt. Dette vil referere til objektet til klassen Database.
- Den private konstruktøren
Database()
forhindrer oppretting av objekter utenfor klassen. - Den statiske klassetypemetoden
getInstance()
returnerer forekomsten av klassen til omverdenen. - I hovedklassen har vi klassetypen variabel db1. Vi ringer
getInstance()
ved hjelp av db1 for å få det eneste objektet til databasen. - Metoden
getConnection()
kan bare nås ved hjelp av objektet til databasen. - Siden databasen bare kan ha ett objekt, kan alle klientene få tilgang til databasen gjennom en enkelt tilkobling.
Det er viktig å merke seg at det bare er noen få scenarier (som logging) der singler er fornuftige. Selv en databaseforbindelse bør vanligvis ikke være en singleton.
Vi anbefaler at du unngår å bruke singletons helt hvis du ikke er sikker på om du vil bruke den eller ikke. Lær mer: Hva er så ille ved Singleton?