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