Il pattern Singleton assicura che una classe abbia una sola istanza e fornisce un punto di accesso globale ad essa. Viene utilizzato quando esattamente un oggetto dovrebbe coordinare qualcosa (una configurazione, un pool di connessioni, un logger), anche se è anche alquanto controverso.
Cosa fa 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
