Singleton é um padrão de projeto usado para restringir a instanciação de uma classe para apenas um objeto.
disponivel em https://github.com/walneygomes/SingletonExempleVarianca
1. Aluno:WalneyNegreirosGomes
Codigosdiponivel em: https://github.com/walneygomes/SingletonExempleVarianca
OBJETIVO
Mostra as melhoresformasde utilizaro Singletoncomqualidade.
SINGLETON
Singleton é umpadrãode projeto usadopara restringira instanciaçãode umaclasse para
apenasum objeto.Comomostranauml abaixo:
(disponivelem: WINKEPEDIA)
Existemquatropontosfundamentais.Oprimeiroé ocentrodissotudo,a logica.A própria
classe instanciaelamesmaparaque nenhumaoutra classe faça isso.
Segundaé o construtor.Para se implementar o padrão Singleton na classe acima, esta
deverá possuir um método construtor ServicesFactory() privado.
Terceira é o método getInstance(), que deverá ser obrigatoriamente declarado como um
método estático (static),
Quarto é a variável de instancia dela mesma.No inicio é NULL, mas quando o método
inntancia entra em ação, ela aponta para um objeto ServicesFactory.Ela sempre tem que
esta static para que o método possa realizar a intancia. O static permite que podemos
utilizar o método sem precisar instanciar a classe.
2. Variança Singleton
(disponivelem: https://github.com/w alneygomes/SingletonExempleVarianca)
Sycnchronized
melhor maneira de implementar o Singleton em Java, em um ambiente multithread
com Sycnchronized. Ela força todo segmento a esperar sua vez antes de poder
inserir o método.
Esta solução requer que cada thread seja sincronizado quando, na realidade,
apenas os primeiros precisam ser. Nisso cada classe só pode ser carregada uma
vez e só será carregada quando for necessária. Isso significa que a primeira vez
que obterImpressora é chamado, impressora será carregado e a instance será
criada, e como isso é controlado por Impressora , nenhuma sincronização adicional
é necessária.
3. VOLATILE
O volatile checa sempre se um instancia foi criada e,se não, então sincronizamod.
Assim , sincronizamos apenas uma vez.
(disponivelem: https://github.com/w alneygomes/SingletonExempleVarianca)
Com isso reduzimos a sobrecarga.
4. SINGLETON COM ENUM
Um usuário avançado pode alterar o modificador de acesso privado do construtor para
qualquer coisa que deseje em tempo de execução usando reflexão. Se isso acontecer, o
construtor privado não acessível torna-se acessível e toda a ideia de tornar a classe um
singleton quebra.
Todos os problemas acima podem ser resolvidos com muita facilidade usando o tipo enum
para criar singletons.
(disponivelem: https://github.com/w alneygomes/SingletonExempleVarianca)
As três linhas acima fazem um singleton sem nenhum dos problemas discutidos. Como as
enums são inerentemente serializáveis, não precisamos implementá-las com uma interface
serializável. O problema da reflexão também não está lá. Portanto, é 100% garantido que
apenas uma instância do singleton está presente em uma JVM. Assim, este método é
recomendado como o melhor método de criar singletons em Java.As três linhas acima
fazem um singleton sem nenhum dos problemas discutidos. Como as enums são
inerentemente serializáveis, não precisamos implementá-las com uma interface
serializável. O problema da reflexão também não está lá. Portanto, é 100% garantido que
apenas uma instância do singleton está presente em uma JVM. Assim, este método é
recomendado como o melhor método de criar singletons em Java.
(disponivelem: https://github.com/w alneygomes/SingletonExempleVarianca)
Uma coisa a lembraraqui é que,aoserializarumenum, asvariáveis de camponão estãosendo
serializadas. Porexemplo,se serializarmose desserializarmoso ImpressoraEnumclasse,
perderemosovalordocampo intvalue.