Singleton

7 respostas
S

Pessoal…
Tenho uma aplicação que deve instanciar somente uma vez a classe que recupera uma String de conexão que está num arquivo config.properties.
Como posso usar o pattern singleton para tal?

Obrigado

7 Respostas

Rafael_Nunes

Crie um construtor privado para sua classe, e um método estático que retorne um instância dela.
http://www.cs.wpi.edu/~gpollice/cs509-s04/Patterns/Singleton%20Pattern.html

S

Certo.
Veja o código da classe.

public final class Chave {

// Referência para instância única

private static Chave instance;
// Construtor privado da classe.

private Chave() {

recuperaStringConexao();

}
public synchronized static Chave getInstance() {

if (instance == null) {

instance = new Chave();

}

return instance;

}

E na classe que precisa recuperar essa informação…

String dataSource = Chave.recuperaStringConexao();

Está correto?

rodrigo_corinthians
public class Classe {

private static Classe instance;

private static Classe getInstance() {

if(instance == null){
instance = new Classe();
}

private String recuperaString(){
return "recuperaStringConexao";
}

}

}

Para chamar

Classe classe = Classe.getInstance();
String recuperar = classe.recuperaString();

Sem mais, Rodrigo.

Rafael_Nunes

Quando postar código, coloque entre as tags [ code] [ /code] assim ele fica endentado e de melhor vizualização.

Quanto a classe, você deve recuperá-la através do getInstance(), e o construtor seria responsável por recuperar a String de conexão. Chamando o recuperaStringDeConexao() você teria tantas instâncias quantas fossem solicitadas.

E uma pergunta. Para que você precisa de Singleton para isso, se a informação está num arquivo separado, por que você não carrega uma Collection com as informações deste arquivo?Não entendi a necessidade do Singleton.

S

Ok, dica anotada.
Rodrigo, esse código exemplo está correto?

Rafael, valeu pela dica…O uso do Singleton nesse aplicativo foi um pedido do cliente. Na verdade, em vários locais é usado, mas o valor sempre será o mesmo. Então, em vez de ficar instanciando um objeto para cada caso, crio uma única instância.

Valeu

Abs.

F

Curiosidade,

Por qual motivo tem que ser singleton? Sim, eu vi que o cliente solicitou, mas pq ele quer isso?

]['s

rodrigo_corinthians

Retira uma chaves “}” porq foi uma a mais.

Dentro do construtor da Classe vc instancia a sua classe q retorna a string de conexão.

Sem mais, Rodrigo.

Criado 1 de julho de 2005
Ultima resposta 1 de jul. de 2005
Respostas 7
Participantes 4