O que é o Singleton?
O Singleton é um dos vinte e três design patterns conhecidos do “Gang of Four” que descrevem como resolver problemas recorrentes de projetos de softwares orientados a objeto flexíveis e reutilizáveis. O objetivo é fazer com que os objetos fiquem mais fáceis implementar, alterar, testar e reutilizar.
O Singleton garante com que a classe tenha apenas uma instância e forneça uma única fonte de acesso global as suas propriedades e valores.
Quando se utiliza?
O Singleton pode ser usado quando é necessário resolver esses problemas:
- Deve haver somente uma instância da classe e deve ser acessível aos clientes de um ponto de acesso comum;
- Quando a única instância deve ser extensível por subclasse e os clientes devem ser capazes de usar uma instância estendida sem modificar seu código;
- Esconda o construtor da classe;
- Definir uma operação estática pública (GetInstance()) que retorna a única instância da classe;
- A ideia central deste padrão é fazer com que ele mesmo seja responsável por controlar sua instanciação (que é instanciada apenas uma vez);
- Ocultar o construtor da classe para garantir que mesma nunca possa ser instanciada de fora dela;
- A operação estática pública pode ser acessada facilmente usando o nome da classe e o nome da operação (Singleton.GetInstance()).
Código
Vamos criar duas classes, uma GuidComum (que armazenará um Guid da forma tradicional) e um GuidSingleton (que usará o design pattern Singleton).
GuidComum.cs
public class GuidComum
{
private Guid instance;
public Guid Instance
{
get
{
if (instance == Guid.Empty)
{
instance = Guid.NewGuid();
}
return instance;
}
}
}
GuidSingleton.cs
public class GuidSingleton
{
private static Guid instance;
private GuidSingleton() { }
public static Guid Instance
{
get
{
if (instance == Guid.Empty)
{
instance = Guid.NewGuid();
}
return instance;
}
}
}
Depois de criado, é só chamarmos na controller e exibir na tela os resultados:

Repare que temos dois comportamentos aí. O primeiro Guid é o Comum, que cria uma nova instância a cada vez que é chamado. O segundo é o Singleton, este cria somente uma instância e a utiliza para o projeto todo. Não importa quantas vezes chamamos a página, o Singleton não vai mudar e, se mudar, mudará para todo o sistema.
Conclusão
O pattern Singleton pode ser usado em diversas situações, é excelente para controlar variáveis globais ou garantir que todos estão utilizando o mesmo objeto, porém, deve-se ficar muito atento pois não se esqueça de que uma vez o seu valor alterado todos os que estão utilizando vão notar esta mudança.
Os códigos deste artigo podem ser encontrados no meu GitHub