Singleton é um padrão de projeto criacional, ele é utilizado quando há necessidade de que uma classe seja única, evitando que ela seja instanciada várias vezes e criando um ponto de acesso global para essa instância.
Exemplo de código em Python
class SingletonMeta(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
instance = super().__call__(*args, **kwargs)
cls._instances[cls] = instance
return cls._instances[cls]
Neste trecho de código é definido a metaclasse SingletonMeta, esta é a representação do que a classe Singleton será quando instanciada. O método call determina que esta classe pode ser chamada como uma função.
class Singleton(metaclass=SingletonMeta):
def some_business_logic(self):
A classe Singleton representa uma instância de singleton e deve possuir métodos para execução das suas lógicas de negócio.
Python pode implementar o padrão Singleton de diversas maneiras, neste exemplo foi usado o método de metaclasse. Uma metaclasse é "uma classe de uma classe", ou seja, é criado uma classe que determina como uma classe deve se comportar, esta sendo uma instância da metaclasse.
Referências
Padrões de Projeto (Diogo Moreira, 2020)
Mergulho nos Padrões de Projeto - v2020-1.14 (Alexander Shvets, 2020)
Os códigos usados como exemplo foram retirados do livro Mergulho nos Padrões de Projeto.
Top comments (1)
Boa explicação, que bom ver um post em português por aqui!