Implemente a propriedade de um singleton com um construtor privado ou um tipo enum
Esta é uma série baseada no entendimento de tópicos relacionados ao livro com foco no resumo.
Entendendo...
Singleton é um design pattern utilizado para instanciar uma única vez uma classe durante o ciclo de vida da aplicação.
Exemplos de objetos tipo singleton que utilizamos no dia a dia em aplicações Java são Enum e os Beans do Spring que por padrão são criados como singleton.
Singletons representam um objeto sem estado na aplicação, com a função de executar tarefas / funções.
Como?
Duas formas mais comuns de se criar um Singleton envolvem manter seu construtor privado e ter seus atributos como estáticos publicos para que seja permitido o acesso a instância única.
Exemplo A
public class CalculadoraDeMateriais {
public static final CalculadoraDeMateriais INSTANCE = new CalculadoraDeMateriais();
private CalculadoraDeMateriais() {
}
}
Atenção
Apesar de garantirmos que somente uma única instância seja invocada no exemplo A, um cliente com privilégios pode utilizar o método AccessibleObjet.setAccessible para acessar o construtor privado então para nos precavermos para essa possibilidade utilizamos o exemplo B, onde garantimos que caso já exista a instância que seja lançada Exception.
Exemplo B
public class CalculadoraDeMateriais {
private static final CalculadoraDeMateriais INSTANCE=
new CalculadoraDeMateriais();
private CalculadoraDeMateriais() {
if (INSTANCE != null) {
throw new IllegalStateException();
}
}
public static CalculadoraDeMateriais getInstance() {
return INSTANCE;
}
}
Mais informações...
- A abordagem do campo público deixa bem claro que o objeto é um singleton.
- Podemos utilizar junto com o static factory pois isso permite flexibilidade futura caso não queira mais que seja um singleton.
- Mas a maioria dos casos onde queremos usar um objeto como singleton podemos utilizar Enums que são classes que possuem atributos e métodos e possuem uma única instância em tempo de execução.
- Utilizar Singleton como mostrado nos exemplos acima é pouco usual hoje em dia e é mais difícil de testar.
- Quando estamos falando do uso de Beans do Spring por exemplo que tem como padrão serem criados com escopo de Singleton conseguimos testar.
- Casos mais comuns hoje em dia que utilizamos no código e que funciona super bem são os Enums.
Top comments (0)