Logo David Burdelak
Słownik · Programowanie i wzorce projektowe

Co to jest singleton?

Ostatnia aktualizacja:

Singleton to wzorzec projektowy, który zapewnia, że z danej klasy powstaje tylko jeden obiekt, a dostęp do niego jest globalny. Klasa sama kontroluje liczbę swoich instancji, zwykle przez prywatny konstruktor i statyczną metodę zwracającą ten sam obiekt.

Jak wygląda Singleton?

Przykład w PHP:

class Konfiguracja {
    private static ?Konfiguracja $instancja = null;
    private function __construct() {}
    public static function pobierz(): Konfiguracja {
        return self::$instancja ??= new Konfiguracja();
    }
}

Każde wywołanie Konfiguracja::pobierz() zwraca ten sam obiekt.

Kiedy się go stosuje?

Gdy potrzebny jest jeden współdzielony zasób, np. połączenie z bazą danych, rejestr konfiguracji lub logger. Wiele frameworków zastępuje jednak ręczne Singletony kontenerem zależności, który także tworzy jedną instancję, lecz bez globalnego dostępu.

Dlaczego bywa krytykowany?

Singleton to w praktyce ukryty stan globalny. Utrudnia testowanie, bo trudno podmienić obiekt na atrapę, ukrywa zależności klas i może powodować problemy przy współbieżności. Dlatego uważa się go często za antywzorzec i zaleca wstrzykiwanie zależności.

Ma to bezpośredni związek z praktykami, na których opiera się pisanie czytelnego i zrozumiałego kodu.

Zobacz w praktyce

Powiązane pojęcia

Wszystkie hasła z kategorii Programowanie i wzorce projektowe