sexta-feira, 29 de abril de 2016

Padrão de Projeto Singleton

    Padrão de Projeto é um termo advindo da arquitetura, através dos trabalhos de Christopher Alexander em que ele documentou soluções para problemas cotidianos em arquitetura. Baseados nisso a "Gangue dos Quatro" (GoF) - formada por  Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides - descreveu problemas recorrentes em engenharia de software e soluções para estes.
     Em termos gerais os padrões de projeto denotam uma solução geral e reutilizável para um problema recorrente em um determinado contexto, no nosso, software. Vale lembrar que não se trata de reusar código, mas sim, reusar ideias.
De acordo com Christopher Alexandrer (1979):
Cada padrão é uma regra de três partes que expressa uma relação entre um certo contexto, um problema e uma solução
    Existem vários padrões de projeto, divididos entre GoF e GRASP. Singleton se caracteriza como um padrão GoF de propósito de criação com escopo relacionado aos objetos. A tabela abaixo classifica alguns padrões GoF, dentre eles o Singleton.

Mas afinal, o que é o Singleton?

    Esse padrão se caracteriza por:

  • Garantir a existência de apenas uma instância ativa de uma classe
  • Manter acesso global a este objeto
  • Inicialização Just-in-time encapsulada 

    É muito útil exatamente nas situações em que precisamos de exatamente um objeto ativo para realizar ações dentro de um sistema, além disso, é um padrão extremamente fácil de entender e também de implementar.

    A "mágica" toda está em ter um construtor privado para sua classe e um atributo estático deste objeto nesta classe, deste modo é assegurado que não serão criadas novas instâncias dessa classe, assim como fornecemos acesso global para o único objeto existente deste tipo, ou seja, a classe gerencia sua própria instância. 
    A UML abaixo caracteriza uma classe Singleton em seguida é apresentada uma implementação básica em Java:



    Existem diversas aplicações para o Singleton, muitas vezes associados a outros padrões e projeto, como Abstract Factory, Builder, e Prototype.
    Infelizmente, talvez por ser tão simples, é um dos padrões mais usados incorretamente, muitas vezes sendo usados em situações que não lhe cabem para que o programador não tenha que tratar corretamente a visibilidade dos seus objetos.


Escrito por:
Hugo Gabriel - Integrante do PET Computação