Neste artigo veremos sobre o uso de um design patterns chamado Singleton.
Antes de mais nada você precisa saber o que é e pra que serve os tais métodos de programação chamados de design patterns.

Design Patterns

São elementos da programação orientada a objetos (no nosso caso em Java, mas você pode se sentir à vontade para procurar em outras tantas linguagens como , C#, Delphi, entre outras...), pelo(s) qual(is) nos permite abstrair de maneira mais eficiente e porque não eficaz a recuperação de dados através de uma simples codificação própria para cada elemento de um Design Pattern.

Isso quer dizer que temos alguns Design Patterns para determinados tipos de ações e soluções.

O nome de Design Pattern vem da lógica que temos que ter "as melhores práticas para resolver problemas conhecidos".

Todo o conhecimento da P.O.O é exigido nessa questão, porém aqui vou tentar simplificar as coisas explicando um Design Pattern por vez, é o nosso caso agora com o SINGLETON(lembrando que você pode adaptar esse código para outras linguagens, pois o conceito é o mesmo, visto que é um padrão).

Informações sobre seu conceito e criação é totalmente obrigatório os conhecimento de:

-Polimorfismo;
-Encapsulamento;
-Abstração;
-Herança;
-Agregação;

Singleton

A idéia do cerce da questão em se falando de Singleton, é de que tenhamos uma classe-objeto capaz de ser instanciada(criada em memória pronta para seu uso) uma ÚNICA VEZ e com visibilidade e acessibilidade global dessa instância em um determinado escopo de projeto.

Vamos ilustrar a idéia:

Imagine que tenhamos um Janela, essa seria nossa classe, chamada Janela...



Suponhamos que temos duas funções (que chamamos de métodos), seriam Abrir() e Fechar();

Então...



A questão é que para podermos acessar uma classe e seus métodos/ atributos temos que instanciá-la:

		Janela j = new Janela();
	//aqui então poderíamos usar os métodos no novo objeto j//
		j.Abrir();
 	// ou
		j.Fechar();
	
Até aí tranqüilo? Espero que sim. Mas há um problema toda vez que tivermos que abrir ou fechar essa janela, vamos ter que instanciar ... O que consome linhas de código, tempo, e até mesmo os recurso de seu projeto/sistema. Nesses casos onde temos que usar várias vezes um código semelhante, para tarefas semelhantes, em todo (global) do nosso projeto/sistema, então recomenda-se o uso do formato Singleton.

Mãos à obra

Para isso vamos criar a nossa classe da seguinte maneira:



De acordo com a imagem acima temos várias observações, mas a mais delicada a tratar são as linhas 10 e 22, onde estão a nossa criação de um atributo do tipo Janela , que sempre será uma nova Janela, PORÉM está com o termo INSTANCE, armazenando essa instancia.

E na linha 22 temos um método que sempre retornará o conteúdo de INSTANCE.

Vale lembrar que o que será visível fora desse escopo são somente os métodos e atributos declarados como PUBLIC.

Já os métodos e atributos declarados como PRIVATE, estão acessíveis somente dentro do seu escopo, ou seja, dentro de sua classe.

Vamos lá faça o teste!

Uma outra maneira de controlar, que é a mais usada hoje em dia é da seguinte forma:



Note que nesse código, usei ainda um atributo do tipo da Classe, que é nosso exemplo Janela2 e um método public static synchronized, o qual retorna uma instancia da classe. A grande diferença é o teste executado na linha 13, onde o sistema verificará se já existe uma instância rodando, se verdadeiro retorna tal instância, caso contrário ele cria ela. Dessa forma também se tem o controle que ela foi criada uma UNICA VEZ.

Espero que esse artigo te ajude de alguma forma nos seus projetos.

Mais uma vez, meu muito obrigado e um forte abraço++.