Java Singleton (med eksempel)

I denne vejledning lærer vi om singleton-designmønsteret og hvordan man anvender det i Java ved hjælp af eksempler.

Singleton er et designmønster snarere end en funktion, der er specifik for Java. Det sikrer, at der kun oprettes en forekomst af en klasse.

Et designmønster er ligesom vores kodebibliotek, der indeholder forskellige kodningsteknikker, der deles af programmører over hele verden.

Java Singleton

Sådan kan vi bruge singletoner i Java.

  • Opret en privatekonstruktør, der begrænser sig til at oprette et objekt uden for klassen
  • Opret en privateattribut, der henviser til singleton-objektet.
  • oprette en public staticmetode, der giver os mulighed for at oprette og få adgang til det objekt, vi oprettede. Inde i metoden opretter vi en betingelse, der begrænser os fra at skabe mere end et 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 ovenstående eksempel

  • private static SingletonExample singleObject - en henvisning til klassens objekt.
  • private SingletonExample() - en privat konstruktør, der begrænser oprettelsen af ​​objekter uden for klassen.
  • public static SingletonExample getInstance()- denne metode returnerer henvisningen til det eneste objekt i klassen. Da metoden er statisk, kan den tilgås ved hjælp af klassens navn.

Brug af Singleton Class

Singletons kan bruges, mens du arbejder med databaser. De kan bruges til at oprette en forbindelsespulje for at få adgang til databasen, mens de genbruger den samme forbindelse til alle klienterne. 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 kører programmet, vil output være:

 Du er nu forbundet til databasen. 

I vores ovenstående eksempel

  • Vi har oprettet en singleton-klasse-database.
  • DbObject er et klassetypefelt. Dette refererer til objektet i klassen Database.
  • Den private konstruktør Database()forhindrer oprettelse af objekter uden for klassen.
  • Den statiske klassetypemetode getInstance()returnerer forekomsten af ​​klassen til omverdenen.
  • I hovedklassen har vi klassetypen variabel db1. Vi ringer getInstance()ved hjælp af db1 for at få det eneste objekt i databasen.
  • Metoden getConnection()kan kun tilgås ved hjælp af objektet i databasen.
  • Da databasen kun kan have et objekt, kan alle klienter få adgang til databasen via en enkelt forbindelse.

Det er vigtigt at bemærke, at der kun er et par scenarier (som logning), hvor singletoner giver mening. Selv en databaseforbindelse skal normalt ikke være en singleton.

Vi anbefaler dig at undgå at bruge singletoner fuldstændigt, hvis du ikke er sikker på, om du skal bruge den eller ej. Lær mere: Hvad er så slemt ved Singleton?

Interessante artikler...