Vienvietis modelis yra vienas iš paprastesnių dizaino modelių. Klasė, kuri naudoja vienetinį dizaino modelį, turi vieną egzempliorių, kurį ji valdo pati. Ši klasė neleidžia jokiai kitai klasei sukurti jos egzemplioriaus.

Vienkartinė klasė taip pat suteikia vieną visuotinį prieigos tašką prie jos kuriamo egzemplioriaus. Taigi, bet kuri klasė, kuri nori viengubos klasės egzemplioriaus, turi ją pasiekti per savo vieną prieigos tašką.

Puikus „Java“ palaikymas objektiniam programavimui leidžia lengvai naudoti vienetinį dizaino modelį.

Singleton modelio įgyvendinimas naudojant „Java“.

Yra daug būdų, kaip įdiegti „Singleton“ modelį „Java“ programoje; uoliai ir tingūs požiūriai yra dažni variantai. Kiekvienas iš šių metodų turi savo privalumų ir trūkumų. Todėl pasirinktas metodas turėtų priklausyti nuo to, kaip veiks jūsų programa.

Nekantrus požiūris

Vienkartinio modelio įgyvendinimas naudojant nekantraujantį metodą reiškia, kad klasė sukuria naują savo egzempliorių, kai ji įkeliama.

viešasklasėEagerSingleton{
privatusstatinis EagerSingleton pavyzdys = naujas EagerSingleton();

privatusEagerSingleton(){}

viešasstatinis EagerSingleton getInstance(){
grąžinti instancija;
}
}

The EagerSingletonJava klasė įkeldamas sukuria naują savo egzempliorių. Jis priskiria šį egzempliorių privačiam statiniui atvejo kintamasis, kuris pasiekiamas tik vienkartinėje klasėje. Vienintelis išorinės prieigos prie egzemplioriaus kintamojo taškas yra per getInstance () metodas. Šis metodas grąžina anksčiau sukurtą klasės egzempliorių.

Šis metodas yra puikus, nes jis užkerta kelią daugiasriegis problema, kuri yra vienas iš didžiausių vienetinio modelio iššūkių. Ji išsprendžia kelių gijų problemą sukurdama naują savo egzempliorių, kol bet kuri nauja gija gali pasiekti savo egzemplioriaus kintamąjį. Tai garantuoja, kad kiekviena gija turės prieigą tik prie to paties egzemplioriaus.

Tačiau nekantrus požiūris yra praktiškas tik tuo atveju, jei jūsų programa naudos „singleton“ klasės egzempliorių, kai ji pradės veikti. Priešingu atveju sukursite objektą anksčiau nei jo prireiks jūsų programai ir be reikalo naudosite išteklius.

Tingus požiūris

Atsainus požiūris yra veržlaus požiūrio problemos sprendimas. Tai leidžia jums sukurti naują vienos klasės egzempliorių tik tada, kai to reikia jūsų programai.

viešasklasėLazySingleton{
privatusnepastoviosstatinis LazySingleton egzempliorius;

privatusLazySingleton(){}

viešasstatinis LazySingleton getInstance(){
jeigu (pavyzdys == nulinis) {
sinchronizuoti (LazySingleton.klasė) {
jeigu (pavyzdys == nulinis) {
pavyzdys = naujas LazySingleton();
}
}
}

grąžinti instancija;
}
}

Tingus metodas išsprendžia kelių gijų problemą naudojant sinchronizuoti raktažodį. Tai neleidžia dviem gijomis pasiekti egzemplioriaus kintamąjį vienu metu. Tačiau sinchronizavimas yra brangus, todėl programa jį naudoja tik vieną kartą, kai pirmą kartą iškviečia getInstance ().

Kada naudoti „Singleton“ modelį

Singleton modelis yra naudingas daugelyje scenarijų, kuriant dialogo langus, tvarkant registro parametrus arba tvarkant gijų telkinius.

Kitas įprastas pavienio modelio naudojimas yra sukurti centrinę klasę, kuri valdo duomenų bazių ryšius.