Il Singleton fa parte della famiglia dei pattern creazionali e ha, come principale scopo, quello di garantire che una determinata classe venga istanzanziata una e una sola volta, fornendo così ai client un punto di accesso globale ai suoi metodi e attributi.
La sua applicabilità è circoscritta a tutte quelle circostanze in cui serve disporre di un oggetto comune accessibile in contesti (scope) diversi. La conseguenza immediata dell’applicazione del pattern è quella di predisporre un unico costruttore privato che impedisca l’istanziazione diretta della classe, ma piuttosto, lasciare che questo avvenga tramite un metodo getter che funzionando in modalità lazy restituisca un istanza della stessa mediante l’utilizzo di un attributo privato interno alla classe.