В большинстве языков программирования классы ускользают от системы типов. Хотя класс с его статическими методами и переменными является объектом, он очень часто не может реализовать интерфейс или расширить другие классы. По этой причине его нельзя использовать полиморфно, поскольку он не может быть подтипом другого типа. Например, если у вас есть интерфейс IFooable
, который требуется для нескольких сигнатур методов других классов, объект класса StaticFoo
не может использоваться вместо IFooable
, тогда как FooSingleton.getInstance()
может (при условии, FooSingleton
реализует IFooable
).
Обратите внимание, что, как я прокомментировал ответ Хайнци, синглтон - это образец для управления экземплярами. Он заменяет new Class()
на Class.getInstance()
, что дает автору Class
больший контроль над экземплярами, которые он может использовать для предотвращения создания ненужных экземпляров. Синглтон - это просто особый случай заводского образца, и его следует рассматривать как таковой. Обычное использование делает это скорее особым случаем глобальных реестров, который часто заканчивается неудачей, потому что глобальные реестры не должны использоваться просто волей-неволей.
Если вы планируете предоставлять глобальные вспомогательные функции, тогда статические методы будут работать нормально. Класс будет действовать не как класс, а как пространство имен. Я полагаю, вы сохраняете высокую степень сцепления, или у вас могут возникнуть самые странные проблемы со сцеплением.
Greetz
back2dos