Једноструки образац је један од једноставнијих образаца дизајна. Класа која користи синглетон образац дизајна има једну инстанцу којом управља сама. Ова класа спречава било коју другу класу да креира њену инстанцу.
Једнострука класа такође обезбеђује једну глобалну приступну тачку инстанци коју креира. Дакле, свака класа која жели инстанцу синглетон класе, треба да јој приступи преко своје јединствене приступне тачке.
Јавина одлична подршка за објектно оријентисано програмирање олакшава коришћење обрасца једноструког дизајна.
Имплементација једноструког узорка користећи Јава
Постоји много начина за имплементацију синглетон шаблона у Јави; жељни и лењи приступи су уобичајене варијације. Сваки од ових приступа има своје предности и недостатке. Стога, метод који изаберете да користите треба да зависи од тога како ће ваша апликација функционисати.
Тхе Еагер Аппроацх
Имплементација синглетон шаблона са жељним приступом значи да класа креира нову инстанцу себе када се учита.
јавностикласаЕагерСинглетон{
приватнистатичне ЕагерСинглетон инстанца = Нова ЕагерСинглетон();приватниЕагерСинглетон(){}
јавностистатичне ЕагерСинглетон гетИнстанце(){
повратак инстанца;
}
}
Тхе ЕагерСинглетонЈава класа ствара нову инстанцу себе док се учитава. Додељује ову инстанцу приватној статици променљива инстанце, који је доступан само у оквиру синглетон класе. Једина тачка екстерног приступа променљивој инстанце је преко гетИнстанце() методом. Тај метод враћа претходно креирану инстанцу класе.
Овај приступ је одличан јер спречава мултитхреадинг проблем, који је један од највећих изазова синглетон обрасца. Решава проблем вишенитности тако што креира нову инстанцу себе пре него што било која нова нит може да приступи својој променљивој инстанце. Ово гарантује да ће свака нит имати приступ само истој инстанци.
Међутим, жељни приступ је практичан само ако ће ваша апликација користити инстанцу синглетон класе када почне да ради. У супротном, креираћете објекат пре него што га ваша апликација затреба, користећи ресурсе непотребно.
Лењи приступ
Лењи приступ је решење проблема жељног приступа. Омогућава вам да креирате нову инстанцу синглетон класе само када је то потребно вашем програму.
јавностикласаЛазиСинглетон{
приватнинесталанстатичне ЛазиСинглетон инстанца;приватниЛазиСинглетон(){}
јавностистатичне ЛазиСинглетон гетИнстанце(){
ако (на пример == нула) {
синхронизовано (ЛазиСинглетон.класа) {
ако (на пример == нула) {
инстанце = Нова ЛазиСинглетон();
}
}
}
повратак инстанца;
}
}
Лењи приступ решава проблем са више нити користећи синхронизовано кључна реч. Ово спречава да две нити истовремено добију приступ променљивој инстанце. Синхронизовано је, међутим, скупо, тако да га апликација користи само једном, када први пут позове гетИнстанце().
Када користити Синглетон Паттерн
Образац Синглетон је користан у многим сценаријима, за креирање дијалошких оквира, руковање поставкама регистратора или управљање скуповима нити.
Још једна уобичајена употреба синглетон шаблона је креирање централне класе која управља везама базе података.