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:
- Construtor privado para impedir a criação de novas instâncias usando
new. - Campo estático privado para armazenar a única instância.
- 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.