logo

„Singleton“ metodo dizaino modelis „Java“.

Objektiniame programavime „Java singleton“ klasė yra klasė, kuri vienu metu gali turėti tik vieną objektą (klasės egzempliorių). Po pirmo karto, jei bandome sukurti Java Singleton klases, naujasis kintamasis taip pat nurodo pirmąjį sukurtą egzempliorių. Taigi, kad ir kokios modifikacijos atliktume bet kurį kintamąjį klasėje per bet kurį egzempliorių, paveiks vieno sukurto egzemplioriaus kintamąjį ir yra matomas, jei pasiekiame tą kintamąjį per bet kurį apibrėžto klasės tipo kintamąjį.

Prisiminkite pagrindinius dalykus, apibrėždami klasę kaip viengubą klasę, tai yra kurdami viengubo klasę:



  1. Padarykite konstruktorių privačiu.
  2. Parašykite statinį metodą, turintį šios vienetinės klasės grąžinimo tipo objektą. Čia šiam statiniam metodui parašyti naudojama tinginio inicijavimo sąvoka.

Singleton klasės tikslas

Pagrindinis „Java Singleton“ klasės tikslas yra apriboti objektų kūrimų skaičių iki vieno. Tai dažnai užtikrina prieigos prie išteklių kontrolę, pavyzdžiui, lizdo ar duomenų bazės ryšį.

Atminties vietos švaistymas nevyksta naudojant viengubo klasę, nes tai riboja egzempliorių kūrimą. Kadangi objektas bus kuriamas tik vieną kartą, o ne kiekvieną kartą, kai pateikiamas naujas prašymas.

Šį vieną objektą galime naudoti pakartotinai pagal reikalavimus. Dėl šios priežasties kelių gijų ir duomenų bazių programos dažniausiai naudoja „Singleton“ šabloną „Java“ talpykloje, registravimui, gijų telkimui, konfigūracijos nustatymams ir dar daugiau.



Pavyzdžiui, su mumis yra licencija ir turime tik vieną duomenų bazės ryšį arba tarkime, kad mūsų JDBC tvarkyklė neleidžia mums atlikti kelių gijų, tada Singleton klasė patenka į paveikslėlį ir užtikrina, kad vienu metu būtų tik vienas ryšys. arba viena gija gali pasiekti ryšį.

Kaip sukurti / sukurti „Singleton“ klasę „Java“?

Norėdami sukurti vienos klasės klasę, turime atlikti toliau nurodytus veiksmus:

1. Įsitikinkite, kad egzistuoja tik vienas klasės egzempliorius.



2. Suteikite visuotinę prieigą prie to egzemplioriaus

  • Visų klasės konstruktorių paskelbimas privačiais.
  • Pateikiamas statinis metodas, grąžinantis nuorodą į egzempliorių. Statiniams metodams rašyti naudojama tingaus inicijavimo koncepcija.
  • Egzempliorius saugomas kaip privatus statinis kintamasis.

Pavienių klasių pavyzdys yra Vykdymo laiko klasė, veiksmo serveris ir paslaugų lokatorius . Privatūs konstruktoriai ir gamyklos metodai taip pat yra „singleton“ klasės pavyzdys.

Skirtumas tarp įprastos klasės ir „Singleton“ klasės

Mes galime atskirti Singleton klasę nuo įprastų klasių, atsižvelgiant į klasės objekto formavimo procesą. Norėdami sukurti įprastą klasę, naudojame java konstruktorių. Kita vertus, norėdami sukurti vienos klasės klasę, naudojame metodą getInstance().

Kitas skirtumas yra tas, kad įprastinė klasė išnyksta pasibaigus programos gyvavimo ciklui, o vienkartinė klasė nesunaikinama užbaigus programą.

Singleton klasės modelio formos

Yra dvi vienodo dizaino modelių formos, kurios yra:

  • Ankstyvas paleidimas: Objekto kūrimas vyksta įkėlimo metu.
  • Tingus egzistavimas: Objekto kūrimas atliekamas pagal poreikį.

Įgyvendinimas: Trumpai pažiūrėkime, kaip „Singleton“ klasė skiriasi nuo įprastos „Java“ klasės. Čia skirtumas yra egzistavimo požiūriu, nes normaliai klasei naudojame konstruktorių, o vienkartinei klasei naudojame getInstance() metodas kurią pažvelgsime 1 pavyzdyje, kaip parodyta toliau. Apskritai, norėdami išvengti painiavos, apibrėždami šį metodą, kuris bus pavaizduotas 2 pavyzdyje, kaip metodo pavadinimą taip pat galime naudoti klasės pavadinimą.

1 pavyzdys:

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'>);> >}> >}> }>

>

>

Išvestis

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>

Išvesties paaiškinimas:

Singleton klasė

Vieno žmogaus klasėje, kai pirmą kartą skambiname getInstance() metodas , jis sukuria klasės objektą pavadinimu single_instance ir grąžina jį į kintamąjį. Kadangi vienas_pavyzdys yra statinis, jis pakeičiamas iš null į tam tikrą objektą. Kitą kartą, jei bandysime iškviesti metodą getInstance(), nes single_instance nėra nulinis, jis grąžinamas į kintamąjį, o ne iš naujo sukuriant Singleton klasę. Ši dalis atliekama jei sąlyga.

Pagrindinėje klasėje pavienių klasių egzempliorius sukuriame 3 objektus x, y ir z, iškviesdami statinį metodas getInstance() . Tačiau iš tikrųjų, sukūrus objektą x, kintamieji y ir z nukreipiami į objektą x, kaip parodyta diagramoje. Taigi, jei pakeisime objekto x kintamuosius, tai atsispindės, kai pasiekiame objektų y ir z kintamuosius. Taip pat jei pakeičiame objekto z kintamuosius, tai atsispindi, kai pasiekiame objektų x ir y kintamuosius.

Dabar mes baigėme aprėpti visus 1 pavyzdžio aspektus ir įdiegėme tą patį, dabar įdiegsime Singleton klasę su metodo pavadinimu kaip klasės pavadinimo.

ką reiškia google

2 pavyzdys:

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);> >}> }>

>

>

Išvestis

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>

Paaiškinimas: Vienkartinėje klasėje, kai pirmą kartą iškviečiame Singleton() metodą, jis sukuria Singleton klasės objektą pavadinimu single_instance ir grąžina jį į kintamąjį. Kadangi vienas_pavyzdys yra statinis, jis pakeičiamas iš null į tam tikrą objektą. Kitą kartą, jei bandysime iškviesti Singleton() metodą, nes single_instance nėra nulinis, jis grąžinamas į kintamąjį, o ne iš naujo sukuriant Singleton klasę.

Skaityti toliau: „Java“ dizaino modelių pamoka