Единичният модел е един от по-простите дизайнерски модели. Клас, който използва шаблона за проектиране на singleton, има един екземпляр, който управлява сам. Този клас не позволява на друг клас да създаде негов екземпляр.

Единичен клас също така предоставя единична глобална точка за достъп до екземпляра, който създава. Така че всеки клас, който иска екземпляр на единичен клас, трябва да има достъп до него чрез своята единствена точка за достъп.

Отличната поддръжка на Java за обектно-ориентирано програмиране улеснява използването на шаблона за проектиране на единичен елемент.

Внедряване на модела Singleton с помощта на Java

Има много начини за прилагане на модела сингълтън в Java; нетърпеливият и мързеливият подход са често срещани вариации. Всеки от тези подходи има своите предимства и недостатъци. Следователно методът, който изберете да използвате, трябва да зависи от това как ще работи вашето приложение.

Нетърпеливият подход

Прилагането на модела singleton с нетърпеливия подход означава, че класът създава нов екземпляр от себе си, когато се зарежда.

instagram viewer
публиченкласEagerSingleton{
частенстатичен Екземпляр на EagerSingleton = нов EagerSingleton();

частенEagerSingleton(){}

публиченстатичен EagerSingleton getInstance(){
връщане инстанция;
}
}

The EagerSingletonJava клас създава нов екземпляр от себе си, докато се зарежда. Той присвоява този екземпляр на частната статика променлива на екземпляра, който е достъпен само в класа singleton. Единствената точка за външен достъп до променливата на екземпляра е през getInstance() метод. Този метод връща предварително създаденото копие на класа.

Този подход е чудесен, тъй като предотвратява многопоточност проблем, който е едно от най-големите предизвикателства на единичния модел. Той решава проблема с многонишковостта, като създава нов екземпляр от себе си, преди всяка нова нишка да има достъп до своята променлива на екземпляра. Това гарантира, че всяка нишка ще има достъп само до едно и също копие.

Въпреки това, нетърпеливият подход е практичен само ако вашето приложение ще използва екземпляр на класа singleton, когато започне да работи. В противен случай ще създадете обект, преди вашето приложение да има нужда от него, използвайки ненужно ресурси.

Мързеливият подход

Мързеливият подход е решението на проблема с нетърпеливия подход. Позволява ви да създадете нов екземпляр на единичен клас само когато вашата програма се нуждае от него.

публиченкласLazySingleton{
частенлетливстатичен екземпляр на LazySingleton;

частенLazySingleton(){}

публиченстатичен LazySingleton getInstance(){
ако (инстанция == нула) {
синхронизирани (ЛейзиСингълтън.клас) {
ако (инстанция == нула) {
екземпляр = нов LazySingleton();
}
}
}

връщане инстанция;
}
}

Мързеливият подход решава проблема с многонишковостта, като използва синхронизирани ключова дума. Това не позволява две нишки да получат достъп до променливата на екземпляра едновременно. Синхронизираният обаче е скъп, така че приложението го използва само веднъж, когато за първи път извика getInstance().

Кога да използвате модела Singleton

Моделът Singleton е полезен в много сценарии, за създаване на диалогови прозорци, обработка на настройките на системния регистър или управление на пулове от нишки.

Друга често срещана употреба на модела singleton е да се създаде централен клас, който управлява връзките към базата данни.