Singleton x Classe Estatica

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?!?!

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.

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?

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:

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!!!

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 {}

[quote=“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!!![/quote]

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?

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

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?

agora eu to ninja em singleton huehuehuah

vlw vinci e javateco