DEV Community

Juarez Júnior for Develop4Us

Posted on • Edited on

C# Design Pattern: Singleton (Portugues)

O padrão Singleton é útil quando precisamos garantir que uma classe tenha apenas uma instância durante o uso de uma aplicação. É como ter um único controle para um recurso importante. Isso é útil em situações como controlar o acesso a um arquivo de log, uma conexão de banco de dados, ou até mesmo configurações do sistema que precisam ser acessadas de qualquer lugar. O Singleton ajuda a garantir que esse acesso seja feito sempre pela mesma instância, evitando problemas de duplicação e desperdício de recursos.

Exemplo de Código em C#:

public class Singleton
{
    private static Singleton _instance;

    // Construtor privado para impedir a criação de instâncias externas
    private Singleton() { }

    public static Singleton Instance
    {
        get
        {
            if (_instance == null)
            {
                _instance = new Singleton();
            }
            return _instance;
        }
    }

    public void ShowMessage()
    {
        Console.WriteLine("Singleton instance ativa!");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Singleton s1 = Singleton.Instance;
        Singleton s2 = Singleton.Instance;

        s1.ShowMessage();

        // Verificar se ambas as instâncias são iguais
        Console.WriteLine(s1 == s2);  // True
    }
}
Enter fullscreen mode Exit fullscreen mode

Explicação do Código:

No código, a classe Singleton garante que só existe uma instância dela. O construtor é privado, ou seja, ninguém pode criar outra instância diretamente. O método Instance cuida de retornar essa única instância, criando ela apenas se ainda não existir. No programa principal, as duas variáveis s1 e s2 fazem referência à mesma instância, comprovado pela comparação s1 == s2.

Conclusão:

O Singleton é um padrão simples e eficaz para garantir que uma classe tenha apenas uma instância, especialmente útil em situações onde se quer evitar duplicações desnecessárias, como em conexões ou configurações. É importante ter cuidado com seu uso para não gerar dependências que dificultem a manutenção e testes.

Código fonte: GitHub

Top comments (0)