Wzorzec projektowy Singiel (ang. Singleton) pozwala na utworzenie tylko jednej instancji obiektu danej klasy. Podobnie jak zmienne globalne, instancja Singla jest widoczna w całym programie i każdy komponent ma do niej dostęp. Używa się go głównie do przechowywania konfiguracji programu oraz utrzymania połączenia z bazą danych.

IMPLEMENTACJA

Statyczna metoda getInstance sprawdza czy instancja obiektu tej klasy jest już utworzona, jeśli tak, to zwraca referencję do niej, a jeśli nie, to w razie potrzeby tworzy ją. Aby zablokować tworzenie kolejnych, tych samych instancji konstruktor klasy deklaruje się jako prywatny (private) lub chroniony (protected). Dodatkowo obiekt zabezpieczony jest przed klonowaniem i deserializacją.

PRZYKŁAD

Klasa Singla o nazwie DB posłuży do nawiązania połączenia z bazą danych. Funkcja connection zwróci uchwyt połączenia, który będzie można użyć w dowolnym fragmencie kodu programu, na przykład w celu wykonania kwerendy SQL.

Teraz możemy przetestować wzorzec:

Spróbuj jeszcze sklonować obiekt:

Oczywiście, będzie to niemożliwe 🙂 Wyświetli się wyjątek:

Fatal error: Uncaught Error: Trying to clone an uncloneable object of class PDO in …


Przykład na GitHub →