Ühetooniline muster on üks lihtsamaid kujundusmustreid. Klassil, mis kasutab üksikut kujundusmustrit, on üks eksemplar, mida ta ise haldab. See klass takistab teistel klassidel selle eksemplari looma.
Üksikklass pakub ka selle loodud eksemplarile ühe globaalse pöörduspunkti. Seega peab iga klass, mis soovib üksiku klassi eksemplari, pääseda sellele juurde oma ühe pöörduspunkti kaudu.
Java suurepärane tugi objektorienteeritud programmeerimisele muudab üksikkujundusmustri kasutamise lihtsaks.
Singletoni mustri rakendamine Java abil
Üksikute mustri rakendamiseks Javas on palju võimalusi; innukas ja laisk lähenemine on tavalised variatsioonid. Igal neist lähenemisviisidest on oma eelised ja puudused. Seetõttu peaks teie valitud meetod sõltuma teie rakenduse toimimisest.
Innukas lähenemine
Üksikute mustri rakendamine innuka lähenemisviisiga tähendab, et klass loob laadimisel endast uue eksemplari.
avalikklassEagerSingleton{
privaatnestaatiline EagerSingletoni eksemplar = uus EagerSingleton();privaatneEagerSingleton(){}
avalikstaatiline EagerSingleton getInstance(){
tagasi näide;
}
}
The EagerSingletonJava klass loob laadimisel endast uue eksemplari. See määrab selle eksemplari privaatsele staatikale eksemplari muutuja, mis on saadaval ainult üksikklassis. Ainus välise juurdepääsupunkt eksemplari muutujale on läbi getInstance() meetod. See meetod tagastab klassi varem loodud eksemplari.
See lähenemisviis on suurepärane, kuna see hoiab ära mitmelõimeline probleem, mis on üksikute mudelite üks suurimaid väljakutseid. See lahendab mitme lõimega seotud probleemi, luues endale uue eksemplari, enne kui mõni uus lõim pääseb juurde oma eksemplari muutujale. See tagab, et igal lõimel on juurdepääs ainult samale eksemplarile.
Kuid innukas lähenemine on praktiline ainult siis, kui teie rakendus kasutab käivitamisel üksiku klassi eksemplari. Vastasel juhul loote objekti enne, kui teie rakendus seda vajab, kasutades tarbetult ressursse.
Laisk lähenemine
Laisk lähenemine on lahendus innuka lähenemise probleemile. See võimaldab teil luua üksiku klassi uue eksemplari ainult siis, kui teie programm seda vajab.
avalikklassLazySingleton{
privaatnemuutlikstaatiline LazySingletoni eksemplar;privaatneLazySingleton(){}
avalikstaatiline LazySingleton getInstance(){
kui (näide == null) {
sünkroniseeritud (LazySingleton.klass) {
kui (näide == null) {
näide = uus LazySingleton();
}
}
}
tagasi näide;
}
}
Laisk lähenemine lahendab mitmelõimelise probleemi, kasutades sünkroniseeritud märksõna. See takistab kahe lõime juurdepääsu eksemplari muutujale korraga. Sünkroonimine on aga kallis, nii et rakendus kasutab seda ainult üks kord, kui ta kutsub esimest korda getInstance().
Millal kasutada Singletoni mustrit
Singletoni muster on kasulik paljudes stsenaariumides, dialoogibokside loomiseks, registrisätete haldamiseks või lõimekogumite haldamiseks.
Veel üks levinumaid üksikmustri kasutusvõimalusi on luua keskklass, mis haldab andmebaasiühendusi.