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
Clean Code - jak pisać czytelny i zrozumiały kod
Jak zmierzyć i spłacać dług technologiczny w projekcie
Overengineering w stronach internetowych Powiązane pojęcia
Wszystkie hasła z kategorii Programowanie i wzorce projektowe