Sobes.tech
Junior

O que é o padrão Singleton?

sobes.tech IA

Resposta da IA

O Singleton é um padrão de design criacional que garante que uma classe tenha apenas uma instância e fornece um ponto de acesso global a essa instância. É aplicado quando é necessário um objeto único para gerenciar um recurso ou estado compartilhado.

Princípio de funcionamento:

  1. Construtor privado para impedir a criação de novas instâncias usando new.
  2. Campo estático privado para armazenar a única instância.
  3. Método estático público que fornece acesso à instância:
    • Verifica se a instância foi criada.
    • Se não, a cria e a armazena no campo estático.
    • Retorna a instância criada ou existente.

Exemplo em Java:

public class Singleton {
    // Campo estático privado para armazenar a instância
    private static Singleton instance;

    // Construtor privado
    private Singleton() {
        // Inicialização, se necessário
    }

    // Método estático público para obter a instância
    public static Singleton getInstance() {
        // Verificação de null para inicialização preguiçosa
        if (instance == null) {
            // Sincronização para segurança em ambientes multithread
            synchronized (Singleton.class) {
                // Verificação dupla dentro do bloco sincronizado
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }

    // Lógica de negócio do singleton
    public void doSomething() {
        System.out.println("Singleton instance is doing something.");
    }
}

Aplicação em QA Automation:

  • Gestão de configurações de testes (arquivos de propriedades, variáveis de ambiente).
  • Instância única do driver do navegador (WebDriver) quando todos os testes usam o mesmo driver.
  • Gerenciador de logs ou relatórios.
  • Pool de conexões com o banco de dados.

Vantagens:

  • Garante a existência de apenas uma instância.
  • Fornece um ponto de acesso conveniente à instância.
  • Inicialização preguiçosa (criada apenas na primeira solicitação).

Desvantagens:

  • Pode ocultar dependências.
  • Dificulta os testes unitários, pois o singleton é um estado global.
  • Viola o princípio de responsabilidade única (a classe pode ser responsável por sua lógica e por gerenciar seu ciclo de vida).
  • Podem surgir problemas de concorrência se não for implementado corretamente.