| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/08/2006 15:32:18
|
ssousuke
Thread.start()
Membro desde: 04/04/2006 11:33:53
Mensagens: 27
Offline
|
Boa Tarde,
Então... ainda não consegui ver "aquela vantagem" em criar um singleton ao invés de usar metodos estáticos, o que na minha opinião seria muito mais prático do que um singleton.....
Vejo vantagem em criar um singleton qdo eu precisasse herdar funcionalidades de alguma classe.... Pois colocando todos os metodos estáticos não tenho como tirar proveito de uma herança....
Dizem que singleton é util tb para poder inicializar os objetos da classe de uma forma organizada em que seja importante a ordem com que os objetos sejam instanciados, mas isso tb é possivel utilizando um "bloco estático"...
Um facade por exemplo.... é um singleton??? ou é mais prático fazer vários metodos estáticos???
valeu
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/08/2006 16:31:32
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7769
Localização: London, UK
Offline
|
Estado mantido de forma estatica numa aplicacao eh tao venenoso quanto variaveis globais. Nao importa como esse estado eh acessado. Seja via singletons ou metodos estaticos, vai continuar sendo venenoso.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/08/2006 17:03:44
|
ssousuke
Thread.start()
Membro desde: 04/04/2006 11:33:53
Mensagens: 27
Offline
|
Então.... essa é uma regra da OO.... e vc está certo!!!! mas esse não é exatamente o foco da pergunta (qdo usar variaveis/metodos estaticas e qdo não usar...)
A pergunta na verdade é: qual a vantagem em criar um singleton ao invés de todos os métodos da classe estáticas??
até +
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/08/2006 18:27:48
|
Rubem Azenha
Forum Spammer
![[Avatar]](/images/avatar/cb953f6ca5923f7517125db46ed1293d.png)
Membro desde: 28/06/2004 00:10:43
Mensagens: 1691
Localização: São Paulo, SP
Offline
|
poder usar herança e polimorfismo ?
|
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/08/2006 19:21:07
|
ssousuke
Thread.start()
Membro desde: 04/04/2006 11:33:53
Mensagens: 27
Offline
|
bom.... Para usar polimorfismo como fariamos se o singleton diz que seu construtor deve ser private? usariamos então construtor protected certo?!?
imagino que o codigo da super classe ficaria assim:
e da subclasse
public class SingletonSubclasse1 extends Singleton {
protected SingletonSubclasse1() {
}
@Override
public void metodoQuePodeSerSobrescrito() {
System.err.println("SingletonSubclasse1.metodoQuePodeSerS()");
}
}
é assim que vc ve o polimorfismo aplicado ao Singleton, ou a implementação não é bem essa.... concordo que já é uma grande vantagem....
Bom... já estou convencido que o Singleton é "um cara legal"....
mas será que ele tem mais alguma vantagem???
valeu pessoal
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/08/2006 20:20:38
|
alexpfb
JavaBaby
Membro desde: 25/04/2005 00:27:05
Mensagens: 82
Offline
|
Mas se você herdar a classe Singleton, ela vai deixar de ser singleton, pois você permitirá que qualquer subclasse crie uma instância da classe pai. (li isso no head first design patterns).
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/08/2006 22:47:02
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7769
Localização: London, UK
Offline
|
Mais importante, pra que vc vai precisar de uma subclasse de um objeto que so pode existir uma vez?
Alias, singletons desse tipo so existem uma vez por classloader -- o que eh bem inutil, se for parar pra pensar.
Resumindo, nao use singletons - use injecao de dependencias pra configuracao, ou outros mecanismos que nao dependam de estado estatico.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/08/2006 01:14:01
|
Paulo Silveira
Administrador
![[Avatar]](/images/avatar/a87ff679a2f3e71d9181a67b7542122c.jpg)
Membro desde: 07/08/2002 18:38:50
Mensagens: 3112
Localização: São Paulo
Offline
|
cv wrote:Estado mantido de forma estatica numa aplicacao eh tao venenoso quanto variaveis globais. Nao importa como esse estado eh acessado. Seja via singletons ou metodos estaticos, vai continuar sendo venenoso.
o CV tem MAIS do que razao. normalmente usamos singletons so para ter uma maneira de fazer lookup.
rarissimamente (posso ate arriscar um NUNCA) temos motivo para dizer que queremos apenas um objeto do tipo X na memoria.
em vez de metodos estaticos ou singletons, eu dou preferencia para injecao de dependecias de objetos estupidos (isto eh, objetos que tem um monte de metodozinhos simples, sem nenhum estado, diga-se atributos). ou entao voce cria apenas um no seu interceptor/filter/aspect e injeta sempre o mesmo. dando uma escopo "applications" pro objeto (aha! variavel global)
|
http://blog.caelum.com.br
Arquitetura e Design de Software: uma visão sobre a plataforma java |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/08/2006 01:44:00
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7769
Localização: London, UK
Offline
|
Paulo Silveira wrote:Normalmente usamos singletons so para ter uma maneira de fazer lookup.
E isso por si so eh estado mantido de forma estatica, ja que a instancia do singleton eh mantida dessa forma
Da pra entrar em todo tipo de discussao teorica sobre isso, mas se vc quiser resumir bem:
- Variaveis estaticas, so tipos primitivos ou imutaveis, e devem ser final
- Singletons sao indicio de que vc precisa pensar melhor sua arquitetura
- Metodos estaticos sao indicio de que seus objetos tao ficando "burros"
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/08/2006 17:52:18
|
martins
What is classpath?
Membro desde: 07/08/2006 17:09:18
Mensagens: 6
Offline
|
cv wrote:
- Metodos estaticos sao indicio de que seus objetos tao ficando "burros"
e como seria um método não burro para tirar a raiz quadrada numa classe de matemática ???
vc faria um singleton e um método não estático ???
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/08/2006 04:32:41
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7769
Localização: London, UK
Offline
|
Martins, o que seria uma 'classe de matematica'? Pra mim, sqrt() eh um metodo que deveria existir em qualquer numero. Exemplo:
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/08/2006 08:34:45
|
Fabricio Cozer Martins
Virtual Machine Man
![[Avatar]](/images/avatar/2ecd2bd94734e5dd392d8678bc64cdab.jpg)
Membro desde: 08/05/2004 10:22:03
Mensagens: 935
Localização: Salvador/Brasil
Offline
|
cv wrote:Martins, o que seria uma 'classe de matematica'? Pra mim, sqrt() eh um metodo que deveria existir em qualquer numero. Exemplo:

Mas aí você estaria 'inchando' demais a classe Número
Eu costumo usar static somente para classes utilitárias de Texto, Número, Data, etc ... não vejo mal algum nisso.
|
Fabrício Cozer Martins
Analista de Sistemas
Bacharel em Ciência da Computação da UFBa
Sun Certified Programmer for Java 2 Platform 1.4
Sun Certified Web Component Developer for J2EE 1.4 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/08/2006 15:47:42
|
martins
What is classpath?
Membro desde: 07/08/2006 17:09:18
Mensagens: 6
Offline
|
Fabrício Cozer Martins wrote:
cv wrote:Martins, o que seria uma 'classe de matematica'? Pra mim, sqrt() eh um metodo que deveria existir em qualquer numero. Exemplo:

Mas aí você estaria 'inchando' demais a classe Número
Eu costumo usar static somente para classes utilitárias de Texto, Número, Data, etc ... não vejo mal algum nisso.
A solução do cv é interessante, mas o fabrício tem completa razão.
Sobre usar singleton ou não usar eu vou colocar como eu tomo essa decisão:
- Se a classe tem estado interno, ou seja tem atributos que podem afetar outros métodos ou chamadas futuras ao próprio método então eu uso um sigleton, pois atributos estáticos não são uma boa técnica de programação;
- Se o método não é afetado e também não afeta nenhum estado interno da classe ele deve ser estatico, não há razão pra usar sigleton neste caso.
Espero ter ajudado.
[ ] ' s e t +
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/08/2006 09:01:04
|
Guilherme Silveira
Administrador
Membro desde: 14/08/2002 10:09:26
Mensagens: 1060
Localização: Sao Paulo
Offline
|
cv wrote:
Paulo Silveira wrote:Normalmente usamos singletons so para ter uma maneira de fazer lookup.
E isso por si so eh estado mantido de forma estatica, ja que a instancia do singleton eh mantida dessa forma
Da pra entrar em todo tipo de discussao teorica sobre isso, mas se vc quiser resumir bem:
- Variaveis estaticas, so tipos primitivos ou imutaveis, e devem ser final
- Singletons sao indicio de que vc precisa pensar melhor sua arquitetura
- Metodos estaticos sao indicio de que seus objetos tao ficando "burros"
Inclui na lista:
- ThreadLocal eh tao venenoso quanto. Eh o mesmo problema de lookup. E hoje em dia usado em MILHARES de lugares famosinhos por ai...
|
-------------------------------------------------------
Guilherme Silveirahttp://blog.caelum.com.br
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/11/2006 14:06:35
|
gilsonclick@yahoo.com.br
What is classpath?
Membro desde: 31/10/2006 13:34:19
Mensagens: 7
Offline
|
Martins,
Sobre isto que voce comentou é possivel voce nos dar um exemplo ?
Abraços
|
|
|
 |
|
|