Wzorzec Singleton zapewnia, że klasa ma tylko jedną instancję i zapewnia globalny punkt dostępu do niej. Jest używany, gdy dokładnie jeden obiekt powinien koordynować coś (konfigurację, pulę połączeń, logger), choć wzorzec ten jest też nieco kontrowersyjny.
Co robi Singleton
SINGLETON → guarantee a class has only ONE instance, with global access to it:
→ the class controls its own instantiation (private constructor)
→ returns the SAME instance every time it's requested
→ for: things there should only be ONE of, accessed from many places
