Singleton
Origem: Wikipédia, a enciclopédia livre.
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 seu objeto.
Nota linguística: O termo vem do significado em inglês quando se resta apenas uma carta nas mãos, num jogo de baralho.
Muitos 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 classe singleton.
[editar] Exemplo
[editar] Em Java
Segue um exemplo em Java de classe Singleton usada em log de dados. Esta classe suporta inicialização sob demanda e ambientes multi-thread.
public class SingletonLog { // Construtor privado. Suprime o construtor publico padrao. private SingletonLog() { // Leitura da configuração de log. Normalmente descrita em um arquivo. } // Faz o log de eventos da aplicacao public void doLog(String eventDescription) { } //Retorna a instancia unica da classe SingletonLog public static SingletonLog getInstance() { return SingletonLogHolder.instance; } //Classe auxiliar para criacao da instancia. Evita problemas de sincronizacao de threads. private static class SingletonLogHolder { private static SingletonLog instance = new SingletonLog(); } }
[editar] Em C++
Segue um exemplo em C++ da implementação de uma classe Singleton:
class MyClass { private: MyClass() {} // contructor padrão, não deve ser utilizado isoladamente public: static MyClass* getInstance() { static MyClass *instance = 0; return instance ? instance : (instance = new MyClass()); } };