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…
você pode usar o pattern Singleton, mais ou menos assim:
classSingleton{// aqui o nome da classe que você deseja ter apenas uma instânciaprivatestaticSingletoninstance;static{instance=newSingleton();}privateSingleton(){}publicstaticSingletongetInstance(){returninstance;}}
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?
publicclassSingleton{// aqui o nome da classe que você deseja ter apenas uma instância privatestaticSingletoninstance;// por exemplo issopublicstaticIntegervalor;static{instance=newSingleton();}privateSingleton(){}publicstaticSingletongetInstance(){returninstance;}}
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
jairelton
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.
publicclassSingleton{//Criamos a única instânciaprivatestaticSingletoninstance=newSingleton();publicintvalor;//Impedimos a construção de novos objetos, deixando o construtor privado//Note que isso também impede a herança.privateSingleton(){}publicstaticSingletongetInstance(){returninstance;}//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 manipulampublicintgetValor(){returnvalor;}publicvoidsetValor(intvalor){this.valor=valor;}}
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…