Trabalhando com Singleton - Java
Neste artigo demonstro como podemos criar classes para uso global mantendo o controle de suas instancias, usando o Design Pattern Singleton.
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++.
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Vídeo