Enotni vzorec je eden enostavnejših vzorcev oblikovanja. Razred, ki uporablja vzorec načrtovanja singleton, ima en primerek, ki ga upravlja sam. Ta razred preprečuje, da bi kateri koli drug razred ustvaril njegov primerek.

Razred singleton zagotavlja tudi eno globalno dostopno točko do primerka, ki ga ustvari. Torej, vsak razred, ki želi primerek razreda singleton, mora do njega dostopati prek svoje ene same dostopne točke.

Odlična podpora Jave za objektno usmerjeno programiranje olajša uporabo vzorca načrtovanja singleton.

Implementacija vzorca Singleton z uporabo Jave

Obstaja veliko načinov za implementacijo vzorca singleton v Javi; željni in leni pristopi so običajne različice. Vsak od teh pristopov ima svoje prednosti in slabosti. Zato mora biti metoda, ki jo izberete, odvisna od tega, kako bo delovala vaša aplikacija.

Nestrpen pristop

Implementacija vzorca singleton s pristopom eager pomeni, da razred ustvari nov primerek samega sebe, ko se naloži.

javnostirazredEagerSingleton{
zasebnostatična Primerek EagerSingleton = novo EagerSingleton();

zasebnoEagerSingleton(){}

instagram viewer

javnostistatična EagerSingleton getInstance(){
vrnitev primerek;
}
}

The EagerSingletonJava razred med nalaganjem ustvari nov primerek samega sebe. Ta primerek dodeli zasebni statiki spremenljivka primerka, ki je dostopen samo znotraj razreda singleton. Edina točka zunanjega dostopa do spremenljivke primerka je prek getInstance() metoda. Ta metoda vrne predhodno ustvarjeni primerek razreda.

Ta pristop je odličen, saj preprečuje večnitnost problem, ki je eden največjih izzivov vzorca singleton. Rešuje problem večnitnosti tako, da ustvari nov primerek samega sebe, preden lahko katera koli nova nit dostopa do svoje spremenljivke primerka. To zagotavlja, da bo imela vsaka nit dostop samo do istega primerka.

Vendar pa je vnet pristop praktičen le, če bo vaša aplikacija uporabljala primerek razreda singleton, ko se začne izvajati. V nasprotnem primeru boste ustvarili objekt, preden ga bo vaša aplikacija potrebovala, in po nepotrebnem porabili sredstva.

Leni pristop

Leni pristop je rešitev za problem željnega pristopa. Omogoča vam, da ustvarite nov primerek razreda singleton le, ko ga vaš program potrebuje.

javnostirazredLazySingleton{
zasebnohlapljivostatična primerek LazySingleton;

zasebnoLazySingleton(){}

javnostistatična LazySingleton getInstance(){
če (primer == nič) {
sinhronizirano (Leni Singleton.razred) {
če (primer == nič) {
primer = novo LazySingleton();
}
}
}

vrnitev primerek;
}
}

Leni pristop rešuje problem večnitnosti z uporabo sinhronizirano ključna beseda. To prepreči, da bi dve niti istočasno pridobili dostop do spremenljivke primerka. Vendar je sinhronizacija draga, zato jo aplikacija uporabi samo enkrat, ko prvič pokliče getInstance().

Kdaj uporabiti vzorec Singleton

Vzorec Singleton je uporaben v številnih scenarijih, za ustvarjanje pogovornih oken, upravljanje nastavitev registra ali upravljanje skupin niti.

Druga običajna uporaba vzorca singleton je ustvarjanje osrednjega razreda, ki upravlja povezave z bazo podatkov.