Singleton

Definição

O Padrão Singleton garante que uma classe tenha apenas uma instância durante a execução do programa, e fornece um ponto de acesso centralizado e controlado a ela.

Esse padrão é útil quando apenas uma instância de uma classe deve existir — como no caso de gerenciadores de configuração, conexões globais, registradores de log ou cache compartilhado.

Por que é importante

Evita a criação descontrolada de múltiplas instâncias de classes que devem ser únicas, economizando recursos e mantendo a consistência global.

Também permite acesso centralizado à instância e controle de seu ciclo de vida, o que é útil em situações onde o compartilhamento de estado é necessário.

Exemplo prático (Python)

Abaixo, um exemplo do padrão Singleton implementado com uma metaclasse. Esse padrão garante que apenas uma instância da classe seja criada — mesmo que ela seja chamada várias vezes.

Neste exemplo, a classe Logger representa um serviço de log do sistema, responsável por registrar mensagens de depuração, erro ou informação. Em aplicações reais, loggers costumam ser Singletons para garantir que toda a aplicação compartilhe o mesmo mecanismo de registro — evitando múltiplas instâncias desnecessárias e centralizando a saída dos logs.

# Metaclasse que controla a criação de instâncias
class SingletonMeta(type):
    _instancias = {}  # Armazena instâncias únicas por classe

    def __call__(cls, *args, **kwargs):
        if cls not in cls._instancias:
            # Cria a instância se ainda não existir
            cls._instancias[cls] = super().__call__(*args, **kwargs)
        return cls._instancias[cls]

# Classe usando a metaclasse SingletonMeta
class Logger(metaclass=SingletonMeta):
    def escrever(self, mensagem):
        print(f"[LOG]: {mensagem}")

# Uso
log1 = Logger()
log2 = Logger()

print(log1 is log2)  # True — ambas são a mesma instância
log1.escrever("Primeira mensagem")

Neste exemplo, a metaclasse SingletonMeta intercepta a criação da classe Logger e garante que só exista uma instância dela. Mesmo criando log1 e log2, ambas compartilham o mesmo objeto.

Relacionados

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com