Решаю сейчас большую задачу 27 уровня. Там нас просят создать класс StatisticManager и сделать его синглтоном. Ок без проблем! В дальнейшем, в других классах программы мне приходится вызывать методы StatistcManager'а, и тут я начинаю сталкиваться с небольшими раздражающими моментами, приходится писать ссылочную переменную
StatisticManager statisticManager = StatisticManager.getInstance();
statisticManager.method();
или так:
StatisticManager.getInstance().method();
Это же столько лишних букв! Намного проще было бы сделать класс статическим и писать так:
StatisticManager.method();
Думаю, наверно синглтон в чем то выигрывает перед статическим классом? Читаю статью на Хабре и только усиливаю свои сомнения. Синглтон как минимум в данной задаче - избыточен.
Пока для себя вижу только одно применение синглтона - если нам нужно сэкономить ресурсы и создать объект не сразу, а когда - нибудь потом, когда он нам понадобиться. В остальных случаях статический класс - самое оно.
На хабре еще что-то пишут про наследование, но слабо пока могу себе представить такую ситуацию, наверно тоже не очень часто.
Если я не прав, поправьте меня, пожалуйста. Просто хочу лучше понять принципы проектирования и возможно это поможет разобраться кому то еще :)
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Вообще, у меня все сильнее укрепляется подозрение, что многие из паттернов уже устарели и в эпоху Java 8 с лямбдами стали малоактуальны.