„Singleton to zło!” – ktoś w internecie, pewnie z czerwonymi oczami od nadmiaru DI.
„A jednak tu jesteśmy.” – Ty, próbując ogarnąć współdzielony stan jak dorosły człowiek.

Pogadajmy o najbardziej znienawidzonym wzorcu projektowym, który wraca jak flaky test, co “już był naprawiony” – czyli Singleton.


😈 Wzorzec, który każdy lubi hejtować

Singleton gwarantuje, że klasa ma tylko jedną instancję i udostępnia do niej globalny dostęp.

Brzmi sensownie?
To czemu ten hejt?

Bo rzekomo:

  • Wprowadza globalny stan,
  • Psuje testowalność,
  • Łączy wszystko ze wszystkim,
  • Sprawia, że CI eksploduje jak w memie z psem i kawą w płomieniach.

A mimo to – działa. Rozwiązuje konkretne problemy.
Zwłaszcza w kodzie QA.


🤫 Kiedy Singleton MA sens

Masz klasę reportera, która:

  • Tworzy raport HTML raz,
  • Dopisuje logi z każdego kąta testów,
  • Zamyka raport na koniec z godnością.

Jakie masz opcje?

  • Tworzyć nowego reportera w każdym teście?
    Nie. Po prostu nie.

  • Trzymać to jako globalną zmienną?
    Witamy w spaghetti world.

  • Singleton?
    Elegancko. Skutecznie. Z kontrolą.

Oto leniwa wersja Singletona w Pythonie:

class SingletonLazy:
    _instance = None

    def __new__(cls):
        if cls._instance is None:
            cls._instance = super().__new__(cls)
        return cls._instance

class Reporter(SingletonLazy):
    def __init__(self):
        self.log = []

    def add_log(self, message):
        self.log.append(message)

Użycie:

r1 = Reporter()
r2 = Reporter()

print(r1 is r2)  # True

Jedna instancja. Zero chaosu.


🙀 Ale przecież to globalny stan!

Tak. I co z tego?
Twój ConfigManager, połączenie z DB, instancja drivera Selenium – to już są Singletony.
Po prostu czasem udajesz, że nie są.

Klucz to dyscyplina.
Nie rób z Singletona śmietnika. Używaj tam, gdzie ma sens i zachowuj się odpowiedzialnie.


✅ Gdzie Singleton błyszczy w QA

  • 🗂️ ConfigManager – jeden config, jedno źródło prawdy.
  • 🧪 Reporter/Logger – jeden raport, zero chaosu.
  • 🔌 Połączenia do DB – reuse, nie recreate.

Pamiętaj: piszesz framework testowy, nie architekturę NASA.


🧠 TL;DR

  • Singleton nie jest złem wcielonym. Źle użyty Singleton – już tak.
  • Używaj tam, gdzie ma sens: centralna kontrola, współdzielony zasób.
  • Zachowuj kontrolę i myśl architektonicznie, nie kompulsywnie.

🔥 Na zakończenie

Singleton to jak piła łańcuchowa.
W nieodpowiednich rękach – masakra. Ale dobrze użyta – tnie jak marzenie.

Nie przepraszaj, że go używasz. Używaj świadomie.
Niech inni wrzeszczą „antywzorzec”, a Ty rób robotę i generuj raporty jak boss.

Testuj z godnością. Singletonowo, ale odpowiedzialnie. 🧪