Objektorientētajā programmēšanā java viena klase ir klase, kurā vienlaikus var būt tikai viens objekts (klases gadījums). Pēc pirmās reizes, ja mēs cenšamies izveidot Java Singleton klases, jaunais mainīgais norāda arī uz pirmo izveidoto gadījumu. Neatkarīgi no tā, kādas modifikācijas mēs veicam jebkuram mainīgajam klasē, izmantojot jebkuru gadījumu, tas ietekmē izveidotās atsevišķas instances mainīgo un ir redzams, ja šim mainīgajam piekļūstam, izmantojot jebkuru definētā klases tipa mainīgo.
Atcerieties galvenos punktus, definējot klasi kā viena klase, kas ir, veidojot viengabala klasi:
- Padariet konstruktoru privātu.
- Uzrakstiet statisku metodi, kurai ir šīs singleton klases atgriešanas tipa objekts. Šeit šīs statiskās metodes rakstīšanai tiek izmantots slinkās inicializācijas jēdziens.
Singleton klases mērķis
Java Singleton klases galvenais mērķis ir ierobežot objektu izveides ierobežojumu līdz vienam objektam. Tas bieži nodrošina piekļuves kontroli resursiem, piemēram, ligzdas vai datu bāzes savienojumam.
Atmiņas vietas izšķērdēšana nenotiek, ja tiek izmantota viena klase, jo tā ierobežo gadījumu izveidi. Tā kā objekta izveide notiks tikai vienu reizi, nevis katru reizi, kad tiek veikts jauns pieprasījums.
Java galvenā metode
Mēs varam izmantot šo vienu objektu atkārtoti atbilstoši prasībām. Tas ir iemesls, kāpēc daudzpavedienu un datu bāzu lietojumprogrammas galvenokārt izmanto Java Singleton modeli kešatmiņai, reģistrēšanai, pavedienu apvienošanai, konfigurācijas iestatījumiem un daudz ko citu.
Piemēram, mums ir licence, un mums ir tikai viens datu bāzes savienojums vai pieņemsim, ka mūsu JDBC draiveris neļauj mums veikt vairākpavedienu, tad Singleton klase parādās attēlā un nodrošina, ka vienlaikus ir tikai viens savienojums. vai viens pavediens var piekļūt savienojumam.
Kā izstrādāt / izveidot Singleton klasi Java?
Lai izveidotu vienas klases klasi, mums jāveic tālāk norādītās darbības.
1. Pārliecinieties, ka pastāv tikai viens klases gadījums.
2. Nodrošiniet globālu piekļuvi šai instancei, izmantojot
- Visu klases konstruktoru pasludināšana par privātiem.
- Statiskas metodes nodrošināšana, kas atgriež atsauci uz gadījumu. Statisko metožu rakstīšanai tiek izmantota slinks inicializācijas koncepcija.
- Gadījums tiek saglabāts kā privāts statisks mainīgais.
Vienaldzīgu klašu piemērs ir Izpildlaika klase, darbības servlets un pakalpojumu meklētājs . Privātie konstruktori un rūpnīcas metodes ir arī viensētas klases piemērs.
Atšķirība starp parasto klasi un vienvietīgo klasi
Mēs varam atšķirt Singleton klasi no parastajām klasēm attiecībā uz klases objekta instantifikācijas procesu. Lai izveidotu parastu klasi, mēs izmantojam java konstruktoru. No otras puses, lai radītu vienu klasi, mēs izmantojam metodi getInstance().
Otra atšķirība ir tāda, ka parastā klase pazūd lietojumprogrammas dzīves cikla beigās, savukārt vienreizējā klase netiek iznīcināta, pabeidzot lietojumprogrammu.
Singleton klases modeļa formas
Ir divas viengabala dizaina modeļu formas, kas ir:
- Agrīna instantiācija: Objekta izveide notiek ielādes laikā.
- Slinka instancē: Objekta izveide tiek veikta atbilstoši prasībām.
Īstenošana: Īsumā apskatīsim, kā viena klase atšķiras no parastās java klases. Šeit atšķirība ir instantiācijas ziņā, jo parastajai klasei mēs izmantojam konstruktoru, turpretim viena klasei mēs izmantojam getInstance() metode ko mēs apskatīsim 1. piemērā, kā parādīts tālāk. Kopumā, lai izvairītos no neskaidrībām, mēs varam izmantot arī klases nosaukumu kā metodes nosaukumu, definējot šo metodi, kas tiks attēlota 2. piemērā tālāk.
1. piemērs:
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'> );> > }> > }> }> |
>
>Izvade
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>
Izvades skaidrojums:
Vienpersonu klasē, kad mēs pirmo reizi zvanām getInstance() metode , tas izveido klases objektu ar nosaukumu single_instance un atgriež to mainīgajam. Tā kā viena_instance ir statiska, tā tiek mainīta no nulles uz kādu objektu. Nākamajā reizē, ja mēģināsim izsaukt metodi getInstance(), jo single_instance nav nulle, tā tiek atgriezta mainīgajā, tā vietā, lai atkārtoti izveidotu Singleton klasi. Šī daļa tiek veikta ar nosacījumu, ja.
Galvenajā klasē mēs instantimentējam viengabala klasi ar 3 objektiem x, y un z, izsaucot statisko metode getInstance() . Bet patiesībā pēc objekta x izveides mainīgie y un z tiek norādīti uz objektu x, kā parādīts diagrammā. Tādējādi, ja mēs mainām objekta x mainīgos, tas tiek atspoguļots, kad mēs piekļūstam objektu y un z mainīgajiem. Arī tad, ja mēs mainām objekta z mainīgos, tas tiek atspoguļots, kad mēs piekļūstam objektu x un y mainīgajiem.
Tagad mēs esam pabeiguši aptvert visus 1. piemēra aspektus un esam ieviesuši to pašu, tagad mēs ieviesīsim Singleton klasi ar metodes nosaukumu kā klases nosaukumam.
2. piemērs:
Java
// 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);> > }> }> |
java stīgu klase
>
>Izvade
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>
Paskaidrojums: Singleton klasē, kad mēs pirmo reizi izsaucam Singleton() metodi, tā izveido Singleton klases objektu ar nosaukumu single_instance un atgriež to mainīgajam. Tā kā viena_instance ir statiska, tā tiek mainīta no nulles uz kādu objektu. Nākamajā reizē, ja mēģināsim izsaukt Singleton() metodi, jo single_instance nav nulle, tā tiek atgriezta mainīgajā, tā vietā, lai atkārtoti izveidotu Singleton klasi.
Tālāk lasiet: Java dizaina modeļu apmācība