| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/05/2007 19:02:04
|
arthurnn
JavaEvangelist
Membro desde: 22/12/2006 17:31:53
Mensagens: 477
Offline
|
Ae pessoal gostaria de saber se alguem tem algum tutorial sobre esse design pattern pois apenas o que sei sobre ele .. eh a ex: a classe DATAFORMAT tem esse modelo!! pois nao posso chamar o construtor dela.. eu tenho que pegar uma instancia !! pq isso?!?!?!
flww!!
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/05/2007 19:08:12
|
aleck
GUJ Ranger
![[Avatar]](/images/avatar/2051bd70fc110a2208bdbd4a743e7f79.jpg)
Membro desde: 27/03/2006 08:08:33
Mensagens: 843
Localização: Rio de Janeiro
Offline
|
http://pt.wikipedia.org/wiki/Singleton
[]'s
|
Desenvolvedor iOS/Android
http://blog.alexandresoli.com.br
@alexandresoli |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/05/2007 19:52:39
|
bcartaxo
JavaTeenager
Membro desde: 06/11/2006 00:35:48
Mensagens: 193
Localização: Recife - PE
Offline
|
O padrão de projeto Singleton existe para ser aplicado qd se deseja q exista apenas uma instância da classe. Esse padrão é implementando de forma q a própria classe fica responsável por instanciar e oferecer a única instancia dela mesma, através de um construtor privado (eis a razão pela qual vc n consegue instanciar a classe q vc deseja chamndo o constutor, ele é privado, sua classe n vai enxergar o construtor dele)
Segue a implementação básica de um Singleton:
Sempre q vc precisar de um método de uma classe q implementa o pattern Singleton, chame o método static para obter a instancia da classe e através dessa chamada chame o método desejado.
É basicamente isso.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/05/2007 20:00:16
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20587
Localização: Curitiba/PR
Offline
|
Algumas peculiaridades desse padrão no Java:
1. Uma vez criado, há poucas chances de um singleton ser destruído. Normalmente, o objeto só vai morrer ao final de seu programa ou se implementar algo com weak references;
2. Vários class loaders ou aplicações que rodem em mais de um VM podem ter mais de um singleton. Tome cuidado com isso;
3. Pode ser substituido por depency injection quase sempre;
4. Em aplicações multi-threads, o singleton deve ser sincronizado, ou corre-se o risco de criar várias instâncias.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/05/2007 20:46:59
|
arthurnn
JavaEvangelist
Membro desde: 22/12/2006 17:31:53
Mensagens: 477
Offline
|
E pq eu iria querer ter apenas uma instancia da classe.. e como isso é possivel??? pq nunca vou ter a chamada NEW ??
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/05/2007 02:31:26
|
bcartaxo
JavaTeenager
Membro desde: 06/11/2006 00:35:48
Mensagens: 193
Localização: Recife - PE
Offline
|
Kra... qd vc começar a desenvolver aplicações maiores e divididas em camadas vc vai enxergar q existem inúmeros situações q só se deseja ter uma instância de um determinado objeto. Repositórios são muitas vezes implementados usando Singleton, bem... padrões de projeto é uma coisa de OO n de java especificamente, se vc quiser saber mais sobre Padrões de Projeto, busque no google e na wikipedia sobre Design Patterns do gof pra começar.
Qt ao NEW... Sim, vc nunca vai dar new numca classe q implementa o Pattern Singleton (a menos q vc implemente o Singleton), se vc só está usando uma classe q implementa vc simplesmente chama o método para obter a instancia dessa classe e pronto, vc tem acesso ao objeto (único) da classe, e pode chamar os métodos q quiser.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/05/2007 16:19:36
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20587
Localização: Curitiba/PR
Offline
|
arthurnn wrote:E pq eu iria querer ter apenas uma instancia da classe.. e como isso é possivel??? pq nunca vou ter a chamada NEW ??
Você terá uma única chamada a new, que ficará na parte interna da classe do seu Singleton.
Há muita discussão sobre se é ou não correto o uso de singletons.
O principal uso é gerenciar recursos limitados. O colega deu um exemplo: geralmente as aplicações possuem um (e apenas um) repositório de dados. Ou então, se você desenvolver uma classe que gerencia a placa de som, não vai querer várias instancias dela por aí (pois você geralmente só tem um hardware de som).
Existem pessoas que usam o Singleton como um repositório de constantes globais. Ok, embora você certamente possa fazer isso, não significa que você deva. Constantes globais são um problema e disfarça-las de Singleton não vai te ajudar em nada.
No C++, os singletons ainda tem outra característica interessante. Como não precisamos passar a referência de um singleton nos construtores, métodos e não precisamos guarda-lo em nenhum atributo, também não precisamos importa-lo no .h. Seu uso (e importação) fica restrito somente no .cpp. Isso permite ao compilador perder muito menos tempo em recompilações caso a classe do Singleton seja alterada.
Devido a algumas características da linguagem Java (na verdade, de todas as linguagens com Garbage Collection ou que rodem de maneira distribuída), o Singleton é largamente substituído por Depency Injection.
|
@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) 16/01/2012 14:39:27
|
jamesfrj
HelloWorld
![[Avatar]](/images/avatar/48e72d33e65432f191adb189619be780.jpg)
Membro desde: 28/04/2009 12:51:01
Mensagens: 11
Localização: Interior do RJ
Offline
|
Pessoal sou novo em Java e estava com uma dúvida neste Design Pattern Singleton. Resolvi testar o Singleton com base no código criado pelo colega bcartaxo:
Criei uma classe para teste, dessa forma:
Não entendo porque ele deixa criar o objeto fc2, pois se já instanciei através de fc1 eu não poderia, certo?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/01/2012 15:07:40
|
gilmaslima
JavaEvangelist
![[Avatar]](/images/avatar/52342fd964a7fcc286db3b72884c57cc.jpg)
Membro desde: 17/07/2008 14:40:26
Mensagens: 430
Localização: { Entre um abre e fecha "chaves" }
Offline
|
Não entendo porque ele deixa criar o objeto fc2, pois se já instanciei através de fc1 eu não poderia, certo?
Na verdade tanto a variavel fc2 quanto fc1 apontam para o mesmo objeto em memória.
Faça um testa assim:
Coloque atributos em no objeto instance e altere na primeira variavel (fc1) e depois veja se alterou na variavel fc2
flw!
|
Gilmar Lima
SCJA 1.0
SCJP 5.0
OCWCD 5
public boolean soMeFu(){
while(true){
return true;
}
} |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/01/2012 16:52:36
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20587
Localização: Curitiba/PR
Offline
|
O Singleton significa que só vai existir um objeto (e realmente, no código só foi dado new uma única vez, quando a primeira chamada entrou no if), mas não diz nada sobre quantas referências esse objeto pode ter. O código do bcartaxo, apesar de ser uma implementação comum, tem um problema. Não é thread-safe. O código correto seria: Outra possibilidade, se quiser manter o lazy-loading: Negligenciar thread-safety pode fazer com que seu Singleton deixe de ser um Singleton.
This message was edited 1 time. Last update was at 16/01/2012 16:52:50
|
@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) 17/01/2012 07:19:13
|
jamesfrj
HelloWorld
![[Avatar]](/images/avatar/48e72d33e65432f191adb189619be780.jpg)
Membro desde: 28/04/2009 12:51:01
Mensagens: 11
Localização: Interior do RJ
Offline
|
Obrigado aos colegas ViniGodoy e gilmaslima.
|
|
|
 |
|
|