Segue a nossa saga de descoberta dos patterns. Hoje iremos falar de um pattern que é até um pouco que polêmico, alguns consideram um anti-pattern, outros o utilizam e veem nele utilidade, iremos procurar abordar quais vantagens, desvantagens e o que pode ser tirado proveito do pattern singleton.

Em um artigo falei, que vejo os patterns como uma ferramenta e assim como existe uma ferramenta específica para cada oportunidade, os patterns tem que ser usado com coerência para que venham atender a demanda em um cenário específico. O Singleton é um pattern utilizado, para quando desejamos ter apenas uma instância de um determinado objeto em todo sistema. Imagine a seguinte situação: gerenciamento de cache; por que teríamos mais de uma classe para gerenciar o cache? Ou configuração por exemplo por que ter mais de uma classe de configurações? Em situações como estas, entra a utilidade do singleton. Veja o diagrama abaixo:

Singleton
Exemplo de diagrama.

Como a imagem acima mostra, o singleton é simples; ele geralmente é uma classe estática que tem uma propriedade chamada instância que armazena uma instância dele mesmo e os métodos para o devido fim em que for aplicado o padrão, gerenciamento de cache por exemplo. Veja abaixo uma implementação do singleton:

Implementação do singleton
Exemplo de implementação do singleton.

Observando a figura acima, temos um construtor privado; talvez você esteja se perguntando: um construtor privado? Como vai se criar uma instância de um objeto como este? De dentro da própria classe é possivel sim se criar uma instãncia mesmo com o construtor privado. Note que a propriedade estática que armazena a instância do singleton, tem uma rotina para permitir que haja, apenas uma instância da classe. Você pode utilizar o sigleton, nas situações em que foram ditas, um gerenciador de cache, exceções, ou seja, em situações em que você deseja apenas ter uma única instância da classe. Mais nem tudo são flores, o singleton tem alguns pontos negativos, são eles:

  • O Singleton pode ser quebrado - Embora se deseje apenas ter uma única instância da classe, e seja feito um código para isto, através da reflexão é possível se criar outra instância da classe.
  • É dificil de reverter - No caso por exemplo, de um gerenciador de cache, caso o mesmo estiver espalhado por toda a aplicação, e você se arrepender e quiser mudar, será difícil de reverter as implementações já feitas.

É necessário você saber os prós e contras de utilizar um pattern, ou tecnologia. É necessário ter bom senso para que a ferramenta não atrapalhar, mais seja algo para facilitar o trabalho e dar qualidade. O Singleton pode ser útil, mais em determinadas situações pode ser desnecessário, cabe a você analisar e aplicar ele for útil.

Bom Pessoal, chegamos ao fim deste nosso artigo. Espero ter ajudado e contribuído de alguma forma para o crescimento profissional de cada leitor. Um abraço e até a próxima.