Alguns programadores devem estar pensando agora: Mas isso é fácil! Basta eu ter uma variável global com a instância do objeto e sempre acessar ela! O problema é que essa variável sendo inicializada no começo da execução do projeto, essa classe estará consumindo recursos mesmo sem ser utilizada! Com o Singleton, a classe só é instanciada quando você realmente precisa dela!
Mas como previnir que um objeto não seja instanciado mais de uma vez? A solução é simples! Muitos desconhecem, mas é possível criar um construtor privado! Com isso, a classe só pode ser instanciada dentro de algum dos seus próprios métodos!
public class Singleton {
private Singleton () { }
}
Agora que só podemos instanciar a classe dentro de um método, vamos fazer com que esse método nos garanta que apenas uma classe seja inicializada. Para isso vamos ter uma variável estática que guardará a instância do único objeto instanciado. Caso ela esteja nula, a função irá instanciar o objeto e então retorná-lo para o usuário. Caso ela já contenha uma instância, o método apenas retorna o objeto. Em código, temos:
public class Singleton {
private static Singleton instancia = null;
private Singleton () { }
public static Singleton getInstance() {
if(instancia==null) instancia = new Singleton ();
return instancia;
}
}
Pronto! Nossa classe agora é um Singleton! Não é possível ter mais de uma instância desse objeto! Como se faz para instanciar um objeto já que não posso simplesmente dar um “new” nele?
Singleton c1 = Singleton.getInstance();
Singleton c2 = Singleton.getInstance();
Em nosso exemplo, c1 e c2 representam o mesmo objeto!
Créditos: Mauricio Aniche - Plugmaster
Nenhum comentário:
Postar um comentário