Wzorce projektowe cz. 2 – Singleton

W aplikacji często zdarza się sytuacja, w której wymagamy jednej i tylko jednej instancji danej klasy, przykładem może być baza danych lub konfiguracja. Nie ma potrzeby, aby za każdym razem tworzyć osobny obiekt, który będzie robił to samo i tylko zajmował dodatkowe miejsce w pamięci. Z pomocą tutaj przychodzi nam singleton, który ma następującą postać:

Prywatny __construct() , __clone()  oraz __wakeup()  mają za zadanie ograniczyć możliwość tworzenia nowych instancji poprzez new lub clone.

Od tego momentu możemy zbudować połączenie z bazą danych i zawsze mamy pewność, że w każdym wypadku odwołujemy się dokładnie do tej samej instancji zainicjowanego obiektu:

Singleton budujemy poprzez statyczne odwołanie się do metody getInstance(), co powoduje, że mamy do niego globalny dostęp, a to z kolei sprawia problemy w testowaniu uniemożliwiając m.in. dependency injection.

Jak zwykle odsyłam do GitHuba, gdzie znaleźć można więcej przykładów wraz z testami.

Grafika zapożyczona z serwisu: 9lives