Um usuário não pode ser singleton : um sistema tem vários usuários
Para quê “UsuarioFormBeanSingleton” e não “Usuario” ?
Vc não precisa de um singleton. Vc precisa de um acesso global.
A sua aplicação é web ? use Session para manter o objeto
Se a sua aplicação é standalone desktop ou em alternativa a 4 use ThreadLocal
O que vc precisa é deixar o usuário acessivel em qualquer Thread então o melhor é ThreadLocal ou uma das suas subclasses.
Básicamente é uma forma de associar variáveis à thread. (Thread vc sabe o que é , né? )
Todo o codigo que vc executa está sendo executado por uma thread. Não sempre pela mesma, mas a cada execução por uma só. Entenda que a thread é omnipresente no seu codigo. Então, se vc associa um objeto à thread vc está associando variáveis omnipresentes ao seu codigo. Ou seja, vc pode atribuir e retornar o seu valor a qualquer momento.
Claro, na prática a coisa não é tão simples. Por isso depende da sua arquitetura. E por isso existe a InheritableThreadLocal. É que as vezes a sua thread se divide em outras. Os dados não passam para essas threads a menos que tenham sido colocados na thread original com InheritableThreadLocal.
Pense nestas classes como um Map omnipresente mas com uma só chave e valor.
Perai, não vamos generalizar, se for assim daqui uns dias vocês estão falando também pra não usar classes internas em swing, “porque causam uma má impressão sobre o tanto que eu entendo de OO”
Vamos lá, o Padrão “Singleton”, “Design Patterns” não foi elaborado pra fuder com as nossas vidas, muito pelo contrario, é uma solução, talves não a mais eficiente, mas basta saber quando, onde e porque utiliza-lo.
Cite 3 casos em que o uso dos Singletons é fundametal em Java e que não se pode obter uma solução melhor com outra alternativa que não ferre os testes unitários.
Cuidado que este artigo contém idéias que não muito boas e que para mim invalidam TODO seu texto.
Cite 3 casos em que o uso dos Singletons é fundametal em Java e que não se pode obter uma solução melhor com outra alternativa que não ferre os testes unitários.
Cuidado que este artigo contém idéias que não muito boas e que para mim invalidam TODO seu texto.
[]s
Luca[/quote]
Não Luca, não estou falando que singleton é a melhor solução sempre, só falei que não podemos generalizar, “nunca usar singleton”, pô a própria Api da sun utiliza esse Pattern, Apache também, entre outras, sera que os arquitetos dessas empresas são todos burros?
O problema é que os conceitos MUDARAM. Antigamente ninguém usava injeção de dependências e a prática de testes unitários não era tão obrigatória para selecionar os programadores. Hoje em dia é mais fácil você recomendar fortemente para não usar Singletons do que aturar as conseqüências no projeto de um Singleton mal usado.
E cuidado também que nem sempre os códigos internos do Apache servem de exemplo. Há muito código confuso por lá, mesmo aqueles escritos por não indianos.
A proposta de utilizar Singleton para reter as informações do usuário foi minha… me desculpem.
Não posso falar pra um iniciante colocar um injeção de dependencia se ele nem entende o que é uma ThreadLocal ainda. Achei que iria enrolar muito o pensamento dele.
Bem, siga as orientações da ThreadLocal ou da Session do sergiotaborda.
desenvolvi um exemplo, e gostaria de saber se é isso mesmo que sergiotaborda e Luca queriam dizer ao usar InheritedThreadLocal ao inves do puro padrao Singleton.
O espirito é esse , mas vc criou logo um map como objeto da thread. :lol:
Assim vc pode guardar o que quiser na thread usando uma só ThreadLocal. Como teste é isso mesmo. Mas eu me referia a usar uma ThreadLocal que não seja um Map e sem usar o mecanismo de singleton. Mas agora bateu a dúvida se dá para fazer sem usar o mecanismo de singleton…
public static MyContext getInstance() {
return ((MyContext) context.get());
}