Atualmente estou resolvendo um grande problema no nível 27. Lá somos solicitados a criar uma classe StatisticManager e torná-la um singleton. OK, sem problemas! Mais tarde, em outras classes do programa tenho que chamar os métodos do StatistcManager, e aqui começo a encontrar pequenos momentos chatos, tenho que escrever uma variável de referência
StatisticManager statisticManager = StatisticManager.getInstance(); statisticManager.method();
ou assim: StatisticManager.getInstance().method();
São muitas letras extras! Seria muito mais fácil tornar a classe estática e escrevê-la assim: StatisticManager.method();
Acho que talvez um singleton tenha algo a ganhar em relação a uma classe estática? Li um artigo sobre Habré e só reforcei minhas dúvidas. Singleton, pelo menos nesta tarefa, é redundante. Até agora, vejo apenas um uso para um singleton - se precisarmos economizar recursos e criar um objeto não imediatamente, mas algum tempo depois, quando precisarmos dele. Em outros casos, uma classe estática é adequada. Em Habré também escrevem algo sobre herança, mas mal consigo imaginar tal situação, e provavelmente também não com muita frequência. Se eu estiver errado, corrija-me, por favor. Eu só quero entender melhor os princípios de design e talvez isso ajude alguém a descobrir :)
GO TO FULL VERSION