■ 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.
Trata-se de um padrão de criação de objetos onde uma única instância da classe deve estar ativa em qualquer momento do ciclo de vida da aplicação. É um padrão muito útil para representar configurações genéricas da aplicação e do ambiente de criação. - A figura ao lado representa um diagrama UML de uma classe singleton.
Exemplo:
sing1 = new singleton()
sing2 = new singleton()
if (sing1 = = sing2)
System.Out.Println ("Iguais)
else
System.Out.Println ("Difs.")
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 infra-instrutora 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.
■ Exemplos
► Em Java
Exemplo em Java de classe Singleton usada em log de dados. Esta classe suporta inicialização sob demanda e ambientes multi-thread.
► Em C++
Exemplo em C++ da implementação de uma classe Singleton.
► Em Delphi
Abaixo segue um exemplo de como implementar uma classe Singleton:
Por exemplo, numa classe Fachada, onde se encontra todos os métodos disponíveis para a interface da aplicação, pode ser criado um método dinâmico para que todos os que visualizam essa classe, não criarem mais instâncias da mesma.
► Em PHP
Uma implementação do padrão singleton em PHP.
► Em VB.NET
Uma implementação do padrão singleton com Visual Basic ponto NET.
► Em ActionScript 3
Uma implementação do padrão singleton com ActionScript 3.
■ Fábrica (Factory)
Trata-se de um padrão de criação de objetos onde existe uma classe central (factory) que é o responsável em criar e gerenciar um conjunto de objetos de uma determinada classe. Neste caso, tipicamente as classes geridas pela fábrica não expõem a implementação do construtor, por isso, não há outra forma de instanciar um objeto da classe senão pela chamada à fábrica.
É um padrão útil para gerenciar recursos do sistema ou da aplicação (exemplo: sessões com um SGBD), centralizando as chamadas nas fábricas.
Ir para Padrões Estruturais.