Python: Singleton

Introdução

Singleton é um padrão de projeto de software (do inglês Design Pattern). Este padrão garante a existência de apenas uma instância de uma classe, mantendo um ponto global de acesso ao objeto.

Nota linguística: O termo vem do significado em inglês para um conjunto (entidade matemática) que contenha apenas um elemento, o equivalente a set em Python.

Alguns projetos necessitam que algumas classes tenham apenas uma instância. Por exemplo, em uma aplicação que precisa de uma infraestrutura de log de dados, pode-se implementar uma classe no padrão singleton. Desta forma existe apenas um objeto responsável pelo log em toda a aplicação que é acessível unicamente através da instância de classe singleton.

Quando necessita-se de apenas uma instância da classe, como em uma conexão com banco de dados, suponha-se que diversas chamadas de conexão com o banco de dados em um código na mesma execução, se for instanciado toda vez a classe de banco, haverá grande perda de desempenho, assim usando o padrão singleton, é garantida que nesta execução será instânciada a classe somente uma vez. Lembrando que este pattern é considerado por muitos desenvolvedores um antipattern, então, cuidado onde for utilizá-lo.

Implementações

A versatilidade da linguagem Python permite diversas implementações para o Design Pattern Singleton. São elas:

Referências

https://pt.wikipedia.org/wiki/Singleton
http://stackoverflow.com/questions/31875/is-there-a-simple-elegant-way-to-define-singletons-in-python
http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Singleton.html
http://amir.rachum.com/blog/2012/04/26/implementing-the-singleton-pattern-in-python/
http://devwithpassion.com/felipe/singleton-and-unit-tests/

Comentários