Nella maggior parte dei linguaggi di programmazione le classi sfuggono molto al sistema di tipi. Sebbene una classe, con i suoi metodi statici e le sue variabili, sia un oggetto, molto spesso non può implementare un'interfaccia o estendere altre classi. Per questo motivo, non può essere utilizzato in modo polimorfico, poiché non può essere il sottotipo di un altro tipo. Ad esempio, se si dispone di un'interfaccia IFooable
richiesta da diverse firme di metodi di altre classi, l'oggetto classe StaticFoo
non può essere utilizzato al posto di IFooable
, mentre FooSingleton.getInstance()
può (supponendo, FooSingleton
implementa IFooable
).
Si noti che, come ho commentato la risposta di Heinzi, un singleton è uno schema per controllare l'istanza. Sostituisce new Class()
con Class.getInstance()
, che dà all'autore un Class
maggiore controllo sulle istanze, che può usare per prevenire la creazione di istanze inutili. Il singleton è solo un caso molto speciale del pattern factory e dovrebbe essere trattato come tale. L'uso comune lo rende piuttosto il caso speciale dei registri globali, che spesso finisce male, perché i registri globali non dovrebbero essere usati solo volenti o nolenti.
Se si prevede di fornire funzioni di supporto globali, i metodi statici funzioneranno perfettamente. La classe non agirà come classe, ma solo come spazio dei nomi. Suggerisco di preservare un'elevata coesione o potresti finire con problemi di accoppiamento più strani.
Greetz
back2dos