Wzorzec singleton jest jednym z prostszych wzorców projektowych. Klasa korzystająca ze wzorca projektowego singleton ma jedną instancję, którą zarządza samodzielnie. Ta klasa uniemożliwia jakiejkolwiek innej klasie utworzenie jej instancji.

Klasa singleton zapewnia również pojedynczy globalny punkt dostępu do tworzonej przez siebie instancji. Tak więc każda klasa, która chce instancji klasy singleton, musi uzyskać do niej dostęp za pośrednictwem pojedynczego punktu dostępu.

Doskonałe wsparcie Javy dla programowania obiektowego ułatwia korzystanie z wzorca projektowego singleton.

Implementacja wzorca Singleton przy użyciu języka Java

Istnieje wiele sposobów implementacji wzorca singleton w Javie; chętne i leniwe podejście to powszechne odmiany. Każde z tych podejść ma swoje zalety i wady. Dlatego metoda, którą wybierzesz, powinna zależeć od tego, jak będzie działać Twoja aplikacja.

Chętne podejście

Implementacja wzorca singleton z podejściem chętnym oznacza, że ​​klasa tworzy nową instancję samej siebie podczas ładowania.

instagram viewer
publicznyklasaChętny Singleton{
prywatnystatyczny Instancja EagerSingleton = nowy ChętnySingleton();

prywatnyChętny Singleton(){}

publicznystatyczny Chętny Singleton uzyskac instancje(){
powrót instancja;
}
}

The Chętny Singletonklasa Javy tworzy nową instancję samego siebie podczas ładowania. Przypisuje tę instancję do private static zmienna instancji, który jest dostępny tylko w klasie singleton. Jedynym punktem zewnętrznego dostępu do zmiennej instancji jest plik uzyskac instancje() metoda. Ta metoda zwraca wcześniej utworzoną instancję klasy.

To podejście jest świetne, ponieważ zapobiega wielowątkowość problem, który jest jednym z największych wyzwań formacji singleton. Rozwiązuje problem wielowątkowości, tworząc nową instancję samego siebie, zanim jakikolwiek nowy wątek będzie mógł uzyskać dostęp do swojej zmiennej instancji. Gwarantuje to, że każdy wątek będzie miał dostęp tylko do tej samej instancji.

Jednak podejście z zapałem jest praktyczne tylko wtedy, gdy aplikacja będzie używać instancji klasy singleton podczas uruchamiania. W przeciwnym razie utworzysz obiekt, zanim aplikacja będzie go potrzebować, niepotrzebnie zużywając zasoby.

Leniwe podejście

Leniwe podejście jest rozwiązaniem problemu chętnego podejścia. Pozwala na tworzenie nowej instancji klasy singleton tylko wtedy, gdy program tego potrzebuje.

publicznyklasaLeniwy Singleton{
prywatnylotnystatyczny Instancja LazySingleton;

prywatnyLeniwy Singleton(){}

publicznystatyczny Leniwy Singleton uzyskac instancje(){
Jeśli (instancja == zero) {
zsynchronizowane (Leniwy Singleton.klasa) {
Jeśli (instancja == zero) {
instancja = nowy LeniwySingleton();
}
}
}

powrót instancja;
}
}

Leniwe podejście rozwiązuje problem wielowątkowości za pomocą metody zsynchronizowane słowo kluczowe. Zapobiega to jednoczesnemu dostępowi dwóch wątków do zmiennej instancji. Zsynchronizowane jest jednak drogie, więc aplikacja używa go tylko raz, kiedy po raz pierwszy wywołuje getInstance().

Kiedy używać wzorca Singleton

Wzorzec Singleton jest przydatny w wielu scenariuszach do tworzenia okien dialogowych, obsługi ustawień rejestru lub zarządzania pulami wątków.

Innym powszechnym zastosowaniem wzorca singleton jest utworzenie centralnej klasy zarządzającej połączeniami z bazą danych.