static
классы не для чего-либо, что нуждается в состоянии. Это полезно для объединения нескольких функций, т.е. Math
(или Utils
в проектах). Так что имя класса просто дает нам подсказку, где мы можем найти функции и ничего более.
Singleton
- мой любимый шаблон, и я использую его для управления чем-то в одной точке. Он более гибкий, чем static
классы, и может поддерживать его состояние. Он может реализовывать интерфейсы, наследовать от других классов и разрешать наследование.
Мое правило выбора между static
и singleton
:
Если есть несколько функций, которые должны храниться вместе, тогда static
- выбор.
Все, что требует единого доступа к некоторым ресурсам, может быть реализовано как singleton
.