Pergunta sobre Classe static

7 respostas
ThiagoWorldCoder

Bom dia!

Eu preciso criar uma classe que funcione como um stateless, ou seja, fique vida com uma única instância durante toda a vida da aplicação, eu sei que usando o static eu posso fazer isso, mas eu não tenho a menor idéia de como…

Alguém pode me ajudar?!

valeu!

7 Respostas

wbdsjunior

você pode usar o pattern Singleton, mais ou menos assim:

class Singleton { // aqui o nome da classe que você deseja ter apenas uma instância
    private static Singleton instance;

    static {
        instance = new Singleton();
    }

    private Singleton() {
    }

    public static Singleton getInstance(){
        return instance;
    }
}
e sempre que precisar da instância, faz assim:
Singleton singleton = Singleton.getInstance();
ThiagoWorldCoder

E se eu quiser criar uma variável dentro dele e depois quiser setar algum valor, como eu faria?

public class Singleton { // aqui o nome da classe que você deseja ter apenas uma instância  
        private static Singleton instance;  
 
  // por exemplo isso
          public static Integer valor;

     static {  
          instance = new Singleton();  
     }  
  
     private Singleton() {  
     }  
    
     public static Singleton getInstance(){  
         return instance;  
     }  
   }

vamor supor que eu quero colocar um inteiro lá pra depois usar em qualquer lugar da minha aplicação…

depois como eu faria pra setar um valor inteiro lá?

marcio.rga

Muito boa a dica do wbdsjunior porém esteja certo que você só precisará de uma única instancia.
Houve uma época em que eu queria implementar muita coisa utilizando singleton o resultado foi muita dor de cabeça.

Abraços!

J
obs.: seria melhor usar setValor()

obs.: seria melhor usar setValor()

ViniGodoy

É melhor usar um set. O Singleton é uma classe como outra qualquer, com a diferença de que existe uma única instância. Nesse caso, use as mesmas proteções que vc usaria numa classe normal.

public class Singleton { 
   //Criamos a única instância
   private static Singleton instance = new Singleton();  

   public int valor;

   //Impedimos a construção de novos objetos, deixando o construtor privado
   //Note que isso também impede a herança.
   private Singleton() {  
   }  
    
   public static Singleton getInstance(){  
      return instance;  
   }  

   //Daqui para baixo, trate o Singleton como uma classe qualquer
   //Note que os métodos não são estáticos, nem os atributos 
   //que manipulam
   public int getValor() {
      return valor;
   }

   public void setValor(int valor) {
      this.valor = valor;
   }
}
O uso fica assim:
Singleton.getInstance().setValor(10);

if (singleton.getInstance().getValor() == 10) 
   doSomething();

Agora, faço minhas as palavras do Márcio. Tenha certeza absoluta de que você precisa de um Singleton. E que outra abordagem não resolve de maneira melhor o seu problema. Em quase 100% dos casos, nas aplicações para PC, é possível substituir o Singleton por construções melhores.

wbdsjunior

Basta criar os stributos privados (os atributos não devem ser static… apenas private) e os gets e acessar normalmente…

Singleton singleton = Singleton.getInstance(); singleton.getAtributo();

ThiagoWorldCoder

Muito Obrigado pela ajuda!!

Valeu!!

Criado 5 de novembro de 2008
Ultima resposta 5 de nov. de 2008
Respostas 7
Participantes 5