Singleton x Classe Estatica

9 respostas
D

Li recentemente que Singleton eh um pattern que força q sua classe (singleton) seja instanciada apenas uma vez em toda a sua aplicação…
bom entao pq naum usar uma classe puramente estática?!?! Qual a vantagem em se utilizar um classe singleton?!?!

9 Respostas

S

As vezes voce deseja que uma classe seja instanciada apenas uma vez. Um exemplo é uma classe que contenha propriedades do sistema, nesse tipo de classe nao faz sentido voce ter mais do que uma instancia.

J

Se vc declarar todos o métodos como estáticos, isso não impedi o usuário (programador) instânciar várias classes deste, o que irá implicar em alocação para todos esses objetos na memória. Já com o Singleton, isso não ocorre, pois vc define a maneira de como o usuário vai instânciar a classe e consequentemente somente uma instância existir, mesmo que o usuário tente instânciar mais.

blz?

V

Uma situação que ocorre muito é você inicialmente definir uma classe como Singleton e depois desejar que hajam mais instâncias para a mesma classe. Usando uma classe com métodos estáticos você precisaria alterar todo o seu código. Usando singleton você só precisa alterar o método getInstance, fazendo ela chamar o construtor privado. :wink:

D

blza… acho q eu entendi, mas pelo o q o Vinci disse, deu a entender q se eu tiver uma classe estatica ela tambem tera apenas uma instancia na aplicacao toda…
e o Javateco disse q soh o singleton q faz isso… hehe he e agora!!!

H

Uma situação em que o sigleton não convém ser substituído por uma classe com campos estáticos é a seguinte:

abstract class X
{
  static int op;

  static
  {
    op = ...; // do arquivo de configuração
  }

  static X getInstance() throws Exception
  {
    switch(op)
    {
       case 0:
         return new XImpl0();
       case 1:
         return new XImpl1();
       case 2:
         return new XImpl2();
       case 3:
         return new XImpl3();
       case 4:
         return new XImpl4();
       default:
         throw new Exception("driver não existe");
    }
  }
}

class XImpl0 extends X {}
class XImpl1 extends X {}
class XImpl2 extends X {}
class XImpl3 extends X {}
class XImpl4 extends X {}
J

“darkseid”:
blza… acho q eu entendi, mas pelo o q o Vinci disse, deu a entender q se eu tiver uma classe estatica ela tambem tera apenas uma instancia na aplicacao toda…
e o Javateco disse q soh o singleton q faz isso… hehe he e agora!!!

Não existe uma classe estática, pelo menos para a classe principal.

O que eu quiz dizer é que o Singleton é uma forma de resolver os problemas que eu citei no outro post, caso vc só crie métodos estáticos… quiz mostrar porque utilizar este padrão, em relação a economia de memório por exemplo… certo?

R

como declara uma classe Singleton? :lol: :grin:

J

Singleton é um padrão de projeto…

Mas vamos lá… como o Vinci disse, o construtor é declarado como private e a classe deve fornecer um método estático para retornar uma instância dela, e consequentemente, tem como em apenas uma instância, toda vez que este método for chamado…

Neste link tem um exemplo:

http://www.guj.com.br/user.article.get.chain?page=1&article.id=137

blz?

D

agora eu to ninja em singleton huehuehuah

vlw vinci e javateco

Criado 30 de junho de 2004
Ultima resposta 30 de jun. de 2004
Respostas 9
Participantes 6