Singleton X Metodos Estátiscos  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
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
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7817
Localização: São Paulo, SP
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.
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
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é +


Rubem Azenha
Forum Spammer
[Avatar]

Membro desde: 28/06/2004 00:10:43
Mensagens: 1799
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
[WWW]
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

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).


cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7817
Localização: São Paulo, SP
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.
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
Paulo Silveira
Administrador
[Avatar]

Membro desde: 07/08/2002 18:38:50
Mensagens: 3681
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
[Email] [WWW]
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7817
Localização: São Paulo, SP
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"
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
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 ???
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7817
Localização: São Paulo, SP
Offline

Martins, o que seria uma 'classe de matematica'? Pra mim, sqrt() eh um metodo que deveria existir em qualquer numero. Exemplo:



[Email] [WWW] [Yahoo!] [MSN] [ICQ]
Fabricio Cozer Martins
Virtual Machine Man
[Avatar]

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
[MSN] [ICQ]
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 +
Guilherme Silveira
Administrador

Membro desde: 14/08/2002 10:09:26
Mensagens: 1087
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
[Email] [WWW] [MSN]
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


[MSN]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team