Ads 468x60px

quarta-feira, 14 de agosto de 2013

Tutorial.: Entendendo Singleton


Você sabe o que é um Singleton? O Reduto Nerd dá a dica sobre o que se trata, como funciona e como se parece um código em Java que implementa este padrão.
Há 23 padrões clássicos de projeto de software descritos pela obra Design Patterns de autoria de 4 escritores conhecidos como GoF (Gang of Four). Entre eles está o Singleton que restringe a quantidade de instâncias de uma classe para apenas uma.

"Uai, como assim só uma?"

Sim, qualquer tentativa de instanciação, seja lá de onde partir, retornará o mesmo objeto. Isto é, por mais que diversas outras classes declarem um atributo do tipo da classe Singleton, ao tentar criar uma instância, o primeiro objeto criado durante a execução será retornado causando diversas referências (até mesmo com nomes diferentes) apontando para o mesmo lugar.

"Véi! Pra que isso jovem?"

Desta forma, este será um objeto compartilhado visto que seus atributos ou métodos estarão acessíveis para todos (obviamente dependendo dos modificadores de acesso) e com os mesmos valores e comportamentos. Esta classe Singleton é, na grande maioria das vezes, acessível de forma global por meio de atributos e/ou métodos estáticos.

"Como faz?"

Analise o código abaixo:
public class SingletonRN {
     //Neste atributo ficará a instância do método
     private static SingletonRN instance;
 
     //Método construtor
     private SingletonRN() {
          //Outras operações de inicialização da classe
     }
 
     //Método público que retorna o objeto único
     public static SingletonRN getInstance(){
           //Se o atributo ainda não foi instanciado, cria-se a instância.
           if (instance == null) {
               instance = new SingletonRN();
           }
           //Se já foi instanciado, retorná-la
           return instance;
     }
}
Basicamente isto!

"Só?"

Esta é a base. Você pode complementar o resto da classe como faria normalmente. Na verdade este é um exemplo de Singleton que não é thread-safe.

"WTF?!"

Isso quer dizer que, se vários objetos tentarem acessar e alterar atributos deste Singleton ao mesmo tempo, o programa ficará instável e poderão ocorrer erros. Tal como um banco de dados é preciso regular o acesso por meio de locks para que uma transação seja bem sucedida. O Singleton funciona do mesmo jeito. A melhor forma de implementar isto depende das regras de negócio do seu programa. Enquanto algo/alguém estiver usando o objeto, pode-se bloquear o acesso de outros, ou permitir somente leitura, etc... Criatividade!


E por hoje é só pessoal!
Esperamos que este tutorial tenha sido proveitoso para vocês
Mandem suas dúvidas e sugestões para que possamos compartilhar com a nossa comunidade.
Gostou do tutorial? Ele te ajudou? Então clique nos botões "Curtir" e "+1", e compartilhe esta publicação no Facebook, pode ser que outras pessoas também a achem útil! =D
Fiquem atentos para mais dicas e tutoriais, aqui mesmo, no Reduto Nerd!

Nenhum comentário:

Postar um comentário