[quote=kompiler]Mt se fala do Singleton, mas a maioria dos comentários é sobre qdo NÃO USAR, ora, o negócio parece ter mais contras q prós. Vamos por o Singleton “na fogueira” então:
*) Qdo eu preciso ter somente um objeto de um certo tipo num programa qualquer, esse deve ser um Singleton ou não (digo isso por q em tese eu poderia não querer mais de um objeto desses, ou por economia de memória ou por outra razão qualquer);
*) Um ponto de acesso global ao objeto QUE SOMENTE POR SER 1;
Se colocarmos a questão de acesso global, eu não precisaria fazer “todo esse auê” com “getInstance()” e construtor privado, eu poderia criar um Registry com um objeto instanciado, e em toda parte do programa eu usaria esse mesmo para ter acesso aos métodos da classe.
Enfim, parece q o Singleton tem “mais utilidade” num projeto de biblioteca ou programa compartilhado. Num programa q só um programador fez (ou uma equipe q seja), quem vai ficar instanciando mts vezes o mesmo objeto, isso parece ser meio IRRACIONAL. Pensando assim, cai naquele negócio, é bem mais fácil então eu usar variável global pronto e acabou!
Comentem[/quote]
Exatamente, existem mais contras do que prós.
Singleton só é pra ser usado quando, ao criar um segundo objeto da mesma classe, poderia dar pau. Exemplo: imagine uma classe ModemCelular que é baseado num modem real conectado ao computador. Ora, não é possivel instanciar duis objetos ModemCelular porque não tem dois modems no computador. Então, eu restrinjo usando um Singleton.
Singeton é apenas pro caso de criar uma segunda instância é erro de execução. É mais comum praquelas classes que se baseadas em dispositivos de Hardware.
Usar singleton pra economizar memória é burrice. Você tem gigas! Acesso global é normal pra objetos, mas se usa um Registry de verdade, como o oferecido pelo JNDI ou pelo Spring.