W dzisiejszym artykule zagłębimy się w fascynujący świat Singleton (wzorzec projektowy). Od samego początku do chwili obecnej Singleton (wzorzec projektowy) był tematem zainteresowania, który przykuł uwagę wielu ludzi na całym świecie. W tym artykule zbadamy różne aspekty Singleton (wzorzec projektowy), w tym jego historię, ewolucję, wpływ na społeczeństwo i jego dzisiejsze znaczenie. Dzięki szczegółowej analizie odkryjemy powody, dla których Singleton (wzorzec projektowy) wzbudził tak duże zainteresowanie i jak wpłynął na różne obszary codziennego życia. Przygotuj się na zanurzenie się w ekscytującym świecie Singleton (wzorzec projektowy) i odkryj wszystko, co ten motyw ma do zaoferowania!
Singleton – kreacyjny wzorzec projektowy, którego celem jest ograniczenie możliwości tworzenia obiektów danej klasy do jednej instancji oraz zapewnienie globalnego dostępu do stworzonego obiektu. Niekiedy wzorzec uogólnia się do przypadku wprowadzenia pewnej maksymalnej liczby obiektów, jakie mogą istnieć w systemie[1]. Niektórzy programiści uznają go za antywzorzec, ponieważ łamie zasady projektowania obiektowego, często bywa nadużywany[2] lub sprowadza się do stworzenia obiektowego zamiennika dla zmiennej globalnej[3][4].
Rozważmy aplikację prowadzącą dla celów diagnostycznych dziennik zdarzeń. Poszczególne komponenty dodają wpis do dziennika, przekazując mu jego treść, natomiast dziennik określa, gdzie faktycznie zostanie on zapisany.
Możemy to zapewnić, implementując w dzienniku wzorzec singleton tak, aby mógł on we własnym zakresie zarządzać dostępem do siebie samego[2].
Singleton implementuje się przez stworzenie klasy, która posiada statyczną metodę, która najpierw sprawdza, czy istnieje już instancja tej klasy, w razie potrzeby tworząc ją. Następnie instancja zwracana jest przez referencję. Instancję przechowuje się w prywatnym lub chronionym, statycznym polu, do którego dostęp ma tylko opisana wyżej metoda, która jest jedyną drogą pozyskania instancji obiektu singletonu – aby uniemożliwić tworzenie dodatkowych instancji, konstruktor klasy deklaruje się jako prywatny lub chroniony.
Cały proces jest niewidoczny dla użytkownika. Nie musi on wiedzieć, czy instancja już istnieje czy dopiero jest tworzona. Jeśli żaden komponent nie będzie wykorzystywać klasy, system nie przydzieli jej zasobów.
Zalety:
Wady:
Singleton musi być ostrożnie stosowany w systemach wielowątkowych. Zażądanie instancji klasy przez dwa wątki równocześnie może doprowadzić do utworzenia dwóch niezależnych instancji, dlatego metoda dostępowa powinna być wtedy zaimplementowana z wykorzystaniem wzajemnego wykluczania.