Singleton (singleton)

Minęło kilka dni odkąd zapowiedziałem cykl artykułów o wzorcach projektowych. Czas by przejść do konkretów. Już trochę późno, więc niech na pierwszy ogień pójdzie coś łatwiejszego, mianowicie wzorzec projektowy Singleton.

Singleton (singleton)

Należy do grupy kreacyjnych wzorców projektowych. Jego zadaniem jest zapewnienie, że klasa będzie miała maksymalnie jedną instancję. Inaczej mówiąc chcemy, aby klasa była reprezentowana, tylko przez jeden obiekt.

Jeżeli użytkownik zażyczy sobie nowej instancji klasy w przypadku gdy nie został jeszcze utworzony żaden obiekt klasy, zostanie utworzony nowy obiekt i zwrócona referencja. Natomiast jeżeli będzie już istniał obiekt reprezentujący klasę użytkownik otrzyma tylko referencję do utworzonego już obiektu.

Diagram klas

Singleton diagram UML

Singleton diagram UML

Kod źródłowy

Wyjście:

Kod jest dość dobrze okomentowany, ale najważniejsze w powyższym przykładzie to zwrócenie uwagi na metodę utworzObiekt, którą dzięki temu, że jest publiczna i statyczna możemy wywołać na rzecz klasy Singleton. Za pomocą odbywa się cały proces tworzenia obiektu/zwracania referencji. Utworzony obiekt zapamiętujemy w statycznym polu _obiekt. W zależności od jego stanu tworzymy obiekt lub zwracamy referencję. Kluczowe jest także nadanie konstruktorowi klasy Singleton modyfikatora zakresu private lub protected. Gdybyśmy utworzyli konstruktor publiczny stracilibyśmy kontrolę nad liczbą instancji reprezentujących klasę Singleton, a to jest przecież celem.

Zastosowanie

Dobrą sytuacją na wykorzystanie wzorca są komponenty, które są dostępne globalnie dla wielu użytkowników np. komponent udostępniające wartości domyślne aplikacjom. Nie należy nadużywać wzorca Singleton, ponieważ łamie on kilka podstawowych zasad programowania (jest po części zamknięty na rozbudowę, zasadę jednej odpowiedzialności).

Podsumowanie

Dzisiaj poznaliśmy jeden z podstawowych wzorców projektowych, Singleton, który pilnuje, aby klasa była reprezentowana przed maksymalnie jedną instancję. Mam nadzieję, że tekst nikomu nie sprawił trudności i z chęcią powrócicie do innych artykułów z cyklu wzorce projektowe.

Dodaj komentarz