Olá Pessoal,
Vejo que muitos programadores dizem que Singleton é um antipattern? O que voces teem a dizer sobre isto ? E porque acham que ele é um antipattern ?
Abraços
Olá Pessoal,
Vejo que muitos programadores dizem que Singleton é um antipattern? O que voces teem a dizer sobre isto ? E porque acham que ele é um antipattern ?
Abraços
Olá Gilson,
Gostaria de saber a sua opinião a respeito dessa colocação. :lol:
Singleton eh um pattern, que tem usos rarissimos em aplicacoes J2EE.
Quando usado incorretamente (ou seja, 100% das vezes que eu vi ate hoje em codigo de verdade), singletons sao equivalentes a variaveis globais.
Resumindo:
Singleton pra guardar estado “per-JVM”: pattern.
Singleton pra guardar estado global: anti-pattern.
O que vem a ser um estado “per-JVM”?
Olá Wilian,
Estou tentando montar um conceito ainda sobre o assunto por isso ainda nao tenho uma opiniao formada, mas alguns programadores dizem o seguinte a respeito do singleton, gostaria de que mais programadores opinassem e colocassem suas experiencias para que todos possam se beneficiar do assunto eu estou pesquisando a respeito como disse para formar uma opiniao:
É uma maneira orientada a objetos de trabalhar com variáveis globais, o que caracteriza design mal feito
Singleton possui Forte Acoplamento entre classes e o correto deveria ser fraco acoplamento.
Por causa do forte acoplamento, singletons dificultam testes unitários
Estado que existe existe pra qualquer metodo, classe, package ou thread dentro da mesma JVM
Eu nunca tinha pensado a respeito do singleton dessa maneira.
Eu conheço alguns sistemas que possuem classes com regras de negócio. Classes que recebem parâmetros, fazem um processamento em cima destes parâmetros e retornam um valor ou objeto.
É razoável defender que o método que faça a formatação do cnpj deva estar na Classe onde fica o cnpj, por exemplo, uma classe PessoaJutidica.
Todavia existem situações onde pode fazer sentido colocar um método static em uma classe não instanciável. O java.lang.Math é um exemplo de classe não instanciável, mas NÃO SE TRATA DE UM SINGLETON.
Voltando à questão levantada:
Eu tenho um sistema web e preciso de um método que processe Strings para mim. Eu envio um “Não” e ele me devolve um “Não”. A priori uma Classe com um método estático e um HashSet privado, com a minha lista de Strings resolveria o caso, certo? Mas e se eu quiser puxar a lista de Strings de um properties? Não vale a pena ser um singleton para evitar a abertura do arquivo a cada chamada?
Olá
Mais discussão sobre esta doença em http://www.theserverside.com/blogs/thread.tss?thread_id=42116
[]s
luca
Eu não gosto muito de singleton, mas as vezes tenho que usar.
Um caso: por usar EJB 2.X e não poder usar um sistema de IoC\DI, as interfaces de serviços tem que ser criadas por factories. As factories em geral são sempre singleton.