| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/12/2010 19:26:20
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20587
Localização: Curitiba/PR
Offline
|
O problema é que existem raríssimas situações onde uma coisa é o que o Singleton se propõe: Única.
E, mesmo as que pensamos que são, geralmente acabam precisando ser duplicadas no futuro.
Então, some ao fato de que uma única instância reduz chances de paralelismo e, se não implementada com muito cuidado, pode quebrar entre múltiplos classloaders, e você vai ter um pattern que acende centenas de alertas, especialmente num servidor web.
Eu gosto do Singleton em sistemas mono-classloader, como muitos sistemas Swing ou jogos (em jogos é ainda melhor, pois há poucas threads).
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/12/2010 19:51:04
|
PedroTOliveira
JavaChild
Membro desde: 03/09/2010 10:44:54
Mensagens: 111
Offline
|
ViniGodoy wrote:O problema é que existem raríssimas situações onde uma coisa é o que o Singleton se propõe: Única.
E, mesmo as que pensamos que são, geralmente acabam precisando ser duplicadas no futuro.
Então, some ao fato de que uma única instância reduz chances de paralelismo e, se não implementada com muito cuidado, pode quebrar entre múltiplos classloaders, e você vai ter um pattern que acende centenas de alertas, especialmente num servidor web.
Eu gosto do Singleton em sistemas mono-classloader, como muitos sistemas Swing ou jogos (em jogos é ainda melhor, pois há poucas threads).
Concordo com você, que talves devido a complexidade poderiamos optar inicialmente por outras soluções.
|
blog: www.pedro.oliveira.nom.br/blog/
twitter:www.twitter.com/pedrotoliveira |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/01/2011 01:24:42
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline
|
PedroTOliveira wrote:Eu discordo que singleton é um padrão ruim para aplicações WEB.
Muito pelo contrário em um contexto de injeção de dependências e se tratando da camada de serviços, singleton são bem aceitos.
Primeira vez que eu vejo alguem dizer isso sem um smilie na frente pra indicar que era piada. Eu vacilei e nao percebi o sarcasmo, ou vc ta mesmo falando serio?
Injecao de dependencias existe EXATAMENTE pra nao ter que ficar com estado global/estatico compartilhado entre instancias. Vai totalmente contra a ideia de que "singletons sao bem aceitos".
PedroTOliveira wrote:O que não são recomentados são Static Singletons.
Static Singleton? Porréssa? E o que seria um Dynamic Singleton, diga-se?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/01/2011 15:45:45
|
PedroTOliveira
JavaChild
Membro desde: 03/09/2010 10:44:54
Mensagens: 111
Offline
|
cv wrote:
PedroTOliveira wrote:Eu discordo que singleton é um padrão ruim para aplicações WEB.
Muito pelo contrário em um contexto de injeção de dependências e se tratando da camada de serviços, singleton são bem aceitos.
Primeira vez que eu vejo alguem dizer isso sem um smilie na frente pra indicar que era piada. Eu vacilei e nao percebi o sarcasmo, ou vc ta mesmo falando serio?
Injecao de dependencias existe EXATAMENTE pra nao ter que ficar com estado global/estatico compartilhado entre instancias. Vai totalmente contra a ideia de que "singletons sao bem aceitos".
PedroTOliveira wrote:O que não são recomentados são Static Singletons.
Static Singleton? Porréssa? E o que seria um Dynamic Singleton, diga-se?
Você tem razão, o termo Static Singleton foi infeliz, eu coloquei na cabeça esse termo, por causa da forma como design pattern é aplicado e explicado.
Tem haver com a forma de declarar a instancia da classe de forma static.
Mas também considero que "Singleton" quer dizer:
Garanto que tenho somente uma única instancia dessa classe dentro desse contexto de aplicação.
Tipo:
Nesse caso eu não poderia considerar que meu LoginService um Singleton?
Opa, nosso Map também é uma única instancia! (Aqui teriamos um Singleton?).
Não é próximo do que o container de injeção de dependências faz ?
Porquê na documentação do Spring eles se referem aos beans como sendo por "default" configurados como "Singletons"?
Edit: Acho que a tempo ainda.
Injecao de dependencias existe EXATAMENTE pra nao ter que ficar com estado global/estatico compartilhado entre instancias. Vai totalmente contra a ideia de que "singletons sao bem aceitos".
O papel container de Injeção de Dependências / IOC, para mim, tem mais haver com uma forma de fazer com que certa dependência seja injetada de forma mais "configurável" do que com a eliminação de estado global/estático entre instancias (Por sinal dependendo da implementação/configuração o container não resolve isso).
Outro ponto, é possível injetar dependencias (por default: singletons) de forma dinâmica utilizando recursos AOP e Auto-Wiring do Spring, (Dynamic Singletons?) porém se seus beans possuem atributos compartilhados, você vai ter problemas de classloaders e concorrência do mesmo jeito. (O Container no caso não resolve a questão dos classloaders que o Vini comentou).
This message was edited 1 time. Last update was at 04/01/2011 17:33:25
|
blog: www.pedro.oliveira.nom.br/blog/
twitter:www.twitter.com/pedrotoliveira |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/02/2011 11:51:02
|
andredecotia
JWizard
![[Avatar]](/images/avatar/3e0c75ef9041e74cc2a533fa0fbbf33a.jpg)
Membro desde: 19/10/2009 14:37:32
Mensagens: 2267
Localização: São Paulo
Offline
|
viniciusalvess wrote:
clunsde wrote:Eu diria que o mais correto, seria fazer um tipo Enum, para implementar o padrão Singleton.
Seguindo as palavras do Joshua ...
Como que se faz isso?
|
--
André AS
Analista Programador Java Web freelancer / home office
Linkedin: http://www.linkedin.com/profile/view?id=41470291&trk=tab_pro
|
|
|
 |
|
|