Singleton vzor je jedním z jednodušších designových vzorů. Třída, která používá návrhový vzor singleton, má jedinou instanci, kterou spravuje sama. Tato třída zabraňuje jakékoli jiné třídě vytvořit její instanci.

Třída singleton také poskytuje jeden globální přístupový bod k instanci, kterou vytváří. Takže každá třída, která chce instanci třídy singleton, k ní potřebuje přistupovat prostřednictvím svého jediného přístupového bodu.

Vynikající podpora objektově orientovaného programování v Javě usnadňuje použití návrhového vzoru singleton.

Implementace vzoru Singleton pomocí Javy

Existuje mnoho způsobů, jak implementovat vzor singleton v Javě; dychtivé a líné přístupy jsou běžnými variacemi. Každý z těchto přístupů má své výhody a nevýhody. Proto by metoda, kterou zvolíte, měla záviset na tom, jak bude vaše aplikace fungovat.

Dychtivý přístup

Implementace vzoru singleton s horlivým přístupem znamená, že třída vytvoří novou instanci sebe sama, když se načte.

veřejnosttřídaEagerSingleton{
soukroméstatický Instance EagerSingleton = Nový EagerSingleton();

soukroméEagerSingleton(){}

instagram viewer

veřejnoststatický EagerSingleton getInstance(){
vrátit se instance;
}
}

The EagerSingletontřída Java vytvoří při načítání novou instanci sebe sama. Přiřadí tuto instanci k privátní statické proměnná instance, která je dostupná pouze v rámci třídy singleton. Jediným bodem externího přístupu k proměnné instance je přes getInstance() metoda. Tato metoda vrátí dříve vytvořenou instanci třídy.

Tento přístup je skvělý, protože zabraňuje multithreading problém, který je jednou z největších výzev singletonového vzoru. Řeší problém s více vlákny tím, že vytvoří novou instanci sebe sama dříve, než jakékoli nové vlákno může přistupovat k proměnné instance. To zaručuje, že každé vlákno bude mít přístup pouze ke stejné instanci.

Dychtivý přístup je však praktický pouze v případě, že vaše aplikace bude při spuštění používat instanci třídy singleton. V opačném případě vytvoříte objekt dříve, než jej vaše aplikace potřebuje, a zbytečně tak spotřebováváte zdroje.

Líný přístup

Líný přístup je řešením problému dychtivého přístupu. Umožňuje vám vytvořit novou instanci třídy singleton pouze tehdy, když to váš program potřebuje.

veřejnosttřídaLazySingleton{
soukroménestálýstatický instance LazySingleton;

soukroméLazySingleton(){}

veřejnoststatický LazySingleton getInstance(){
-li (například == nula) {
synchronizované (LazySingleton.třída) {
-li (například == nula) {
instance = Nový LazySingleton();
}
}
}

vrátit se instance;
}
}

Líný přístup řeší problém s vícevlákny pomocí synchronizované klíčové slovo. To zabrání dvěma vláknům získat přístup k proměnné instance současně. Synchronizace je však drahá, takže ji aplikace použije pouze jednou, když poprvé zavolá getInstance().

Kdy použít vzor Singleton

Vzor Singleton je užitečný v mnoha scénářích, k vytváření dialogových oken, zpracování nastavení registru nebo ke správě fondů vláken.

Dalším běžným použitím vzoru singleton je vytvoření centrální třídy, která spravuje databázová připojení.