logo

Singleton Method Design Pattern i Java

I objektorientert programmering er en java singleton-klasse en klasse som bare kan ha ett objekt (en forekomst av klassen) om gangen. Etter første gang, hvis vi prøver å instansiere Java Singleton-klassene, peker den nye variabelen også til den første instansen som ble opprettet. Så uansett hvilken modifikasjon vi gjør på en variabel inne i klassen gjennom en hvilken som helst forekomst, påvirker variabelen til den opprettede enkeltforekomsten og er synlig hvis vi får tilgang til den variabelen gjennom en hvilken som helst variabel av den klassetypen som er definert.

Husk nøkkelpunktene når du definerer en klasse som en singleton-klasse som er når du designer en singleton-klasse:



  1. Gjør en konstruktør privat.
  2. Skriv en statisk metode som har returtypeobjektet til denne singleton-klassen. Her brukes konseptet Lazy initialisering for å skrive denne statiske metoden.

Hensikten med Singleton Class

Det primære formålet med en Java Singleton-klasse er å begrense grensen for antall objektopprettelser til kun én. Dette sikrer ofte at det er tilgangskontroll til ressurser, for eksempel socket eller databasetilkobling.

Sløsing med minneplass skjer ikke ved bruk av singleton-klassen fordi det begrenser oppretting av forekomster. Siden objektopprettingen vil finne sted bare én gang i stedet for å opprette det hver gang en ny forespørsel blir gjort.

Vi kan bruke dette enkeltobjektet gjentatte ganger i henhold til kravene. Dette er grunnen til at flertråds- og databaseapplikasjoner stort sett bruker Singleton-mønsteret i Java for caching, logging, trådsamling, konfigurasjonsinnstillinger og mye mer.



For eksempel, det er en lisens hos oss, og vi har bare én databaseforbindelse eller antar at JDBC-driveren vår ikke tillater oss å gjøre multithreading, så kommer Singleton-klassen inn i bildet og sørger for at det kun er en enkelt tilkobling om gangen. eller en enkelt tråd kan få tilgang til forbindelsen.

Hvordan designe/lage en Singleton-klasse i Java?

For å lage en singleton-klasse må vi følge trinnene nedenfor:

1. Sørg for at bare én forekomst av klassen eksisterer.



konverter int til streng

2. Gi global tilgang til den forekomsten ved

  • Erklærer at alle konstruktører av klassen er private.
  • Oppgi en statisk metode som returnerer en referanse til forekomsten. Det late initialiseringskonseptet brukes til å skrive de statiske metodene.
  • Forekomsten lagres som en privat statisk variabel.

Eksempel på singleton-klasser er Runtime-klasse, Action Servlet og Service Locator . Private konstruktører og fabrikkmetoder er også et eksempel på singleton-klassen.

Forskjellen mellom normal klasse og singleton klasse

Vi kan skille en Singleton-klasse fra de vanlige klassene med hensyn til prosessen med å instansiere objektet til klassen. For å instansiere en normal klasse bruker vi en java-konstruktør. På den annen side, for å instansiere en singleton-klasse, bruker vi getInstance()-metoden.

Den andre forskjellen er at en normal klasse forsvinner ved slutten av livssyklusen til applikasjonen mens singleton-klassen ikke ødelegger når en applikasjon er fullført.

Former for Singleton-klassemønster

Det er to former for singleton-designmønstre, som er:

array i streng
  • Tidlig instansiering: Gjenstandsopprettelsen skjer ved lastetiden.
  • Lat instansiering: Objektopprettelsen gjøres i henhold til kravet.

Gjennomføring: La oss kort hvordan singleton-klassen varierer fra normalklassen i java. Her er forskjellen når det gjelder instansiering ettersom vi for normal klasse bruker en konstruktør, mens for singleton-klasse bruker vi getInstance()-metoden som vi skal se i eksempel 1 som vist nedenfor. Generelt, for å unngå forvirring, kan vi også bruke klassenavnet som metodenavn mens vi definerer denne metoden som vil bli avbildet i eksempel 2 nedenfor som følger.

Eksempel 1:

Java




// Java program implementing Singleton class> // with using getInstance() method> // Class 1> // Helper class> class> Singleton {> >// Static variable reference of single_instance> >// of type Singleton> >private> static> Singleton single_instance =>null>;> >// Declaring a variable of type String> >public> String s;> >// Constructor> >// Here we will be creating private constructor> >// restricted to this class itself> >private> Singleton()> >{> >s =>'Hello I am a string part of Singleton class'>;> >}> >// Static method> >// Static method to create instance of Singleton class> >public> static> synchronized> Singleton getInstance()> >{> >if> (single_instance ==>null>)> >single_instance =>new> Singleton();> >return> single_instance;> >}> }> // Class 2> // Main class> class> GFG {> >// Main driver method> >public> static> void> main(String args[])> >{> >// Instantiating Singleton class with variable x> >Singleton x = Singleton.getInstance();> >// Instantiating Singleton class with variable y> >Singleton y = Singleton.getInstance();> >// Instantiating Singleton class with variable z> >Singleton z = Singleton.getInstance();> >// Printing the hash code for above variable as> >// declared> >System.out.println(>'Hashcode of x is '> >+ x.hashCode());> >System.out.println(>'Hashcode of y is '> >+ y.hashCode());> >System.out.println(>'Hashcode of z is '> >+ z.hashCode());> >// Condition check> >if> (x == y && y == z) {> >// Print statement> >System.out.println(> >'Three objects point to the same memory location on the heap i.e, to the same object'>);> >}> >else> {> >// Print statement> >System.out.println(> >'Three objects DO NOT point to the same memory location on the heap'>);> >}> >}> }>

>

>

Produksjon

Hashcode of x is 558638686 Hashcode of y is 558638686 Hashcode of z is 558638686 Three objects point to the same memory location on the heap i.e, to the same object>

Utgangsforklaring:

Singleton klasse

I en singleton klasse, når vi første gang ringer getInstance()-metoden , oppretter den et objekt av klassen med navnet single_instance og returnerer det til variabelen. Siden single_instance er statisk, endres den fra null til et objekt. Neste gang, hvis vi prøver å kalle getInstance()-metoden siden single_instance ikke er null, returneres den til variabelen, i stedet for å instansiere Singleton-klassen igjen. Denne delen gjøres av if condition.

I hovedklassen instansierer vi singleton-klassen med 3 objekter x, y og z ved å kalle den statiske metode getInstance() . Men faktisk, etter opprettelsen av objekt x, blir variablene y og z pekt på objekt x som vist i diagrammet. Derfor, hvis vi endrer variablene til objekt x, reflekteres det når vi får tilgang til variablene til objektene y og z. Også hvis vi endrer variablene til objekt z, reflekteres det når vi får tilgang til variablene til objektene x og y.

python er numerisk

Nå er vi ferdige med å dekke alle aspekter av eksempel 1 og har implementert det samme, nå skal vi implementere Singleton-klassen med metodenavnet som klassenavnet.

Eksempel 2:

Java




java while loop

// Java program implementing Singleton class> // with method name as that of class> // Class 1> // Helper class> class> Singleton {> >// Static variable single_instance of type Singleton> >private> static> Singleton single_instance =>null>;> >// Declaring a variable of type String> >public> String s;> >// Constructor of this class> >// Here private constructor is used to> >// restricted to this class itself> >private> Singleton()> >{> >s =>'Hello I am a string part of Singleton class'>;> >}> >// Method> >// Static method to create instance of Singleton class> >public> static> Singleton Singleton()> >{> >// To ensure only one instance is created> >if> (single_instance ==>null>) {> >single_instance =>new> Singleton();> >}> >return> single_instance;> >}> }> // Class 2> // Main class> class> GFG {> >// Main driver method> >public> static> void> main(String args[])> >{> >// Instantiating Singleton class with variable x> >Singleton x = Singleton.Singleton();> >// Instantiating Singleton class with variable y> >Singleton y = Singleton.Singleton();> >// instantiating Singleton class with variable z> >Singleton z = Singleton.Singleton();> >// Now changing variable of instance x> >// via toUpperCase() method> >x.s = (x.s).toUpperCase();> >// Print and display commands> >System.out.println(>'String from x is '> + x.s);> >System.out.println(>'String from y is '> + y.s);> >System.out.println(>'String from z is '> + z.s);> >System.out.println(>' '>);> >// Now again changing variable of instance z> >z.s = (z.s).toLowerCase();> >System.out.println(>'String from x is '> + x.s);> >System.out.println(>'String from y is '> + y.s);> >System.out.println(>'String from z is '> + z.s);> >}> }>

>

>

Produksjon

String from x is HELLO I AM A STRING PART OF SINGLETON CLASS String from y is HELLO I AM A STRING PART OF SINGLETON CLASS String from z is HELLO I AM A STRING PART OF SINGLETON CLASS String from x is hello i am a string part of singleton class String from y is hello i am a string part of singleton class String from z is hello i am a string part of singleton class>

Forklaring: I singleton-klassen, når vi første gang kaller Singleton()-metoden, oppretter den et objekt av klassen Singleton med navnet single_instance og returnerer det til variabelen. Siden single_instance er statisk, endres den fra null til et objekt. Neste gang hvis vi prøver å kalle Singleton()-metoden, siden single_instance ikke er null, returneres den til variabelen, i stedet for å instansiere Singleton-klassen igjen.

Les videre: Opplæring i Java Design Patterns