Padrão Singleton simplificado utilizando objects em Kotlin

Já se deparou com situações em que não é desejável a criação de mais de uma instância de uma determinada classe enquanto desenvolvia um de seus aplicativos? Como você resolveu esse problema? Provavelmente fazendo com que o construtor da classe se tornasse e privado e disponibilizando um objeto que era instanciado internamente, certo?!

Bem, caso você não saiba, existe um design pattern que especifica esse comportamento, o padrão Singleton, e uma forma simplificada de implementá-lo em Java seria da seguinte forma:

public class InstanciaUnica {
public InstanciaUnica instancia;

private InstanciaUnica(){
//Garantir que objetos não serão criados fora da classe
}
public static InstanciaUnica getInstancia() {
//retornar a instância única
if(instancia == null) {
instancia = new InstanciaUnica();
}
return instancia;
}
public void exibirInformacoesDeSeguranca() {
...
}
}

Como você já pode perceber, a maior parte do código que escrevemos está sendo escrito apenas para obedecer ao padrão, uma vez que de todo esse bloco de código, a única parte que realmente importa é o método exibirInformacoesDeSeguranca.

Como já era de se esperar, a linguagem Kotlin possui uma maneira bem mais eficiente para resolver esse tipo de problema através da utilização da palavra reservada object, observe:

object InstanciaUnica {
fun exibirInformacoes() {
...
}
}

Pronto! Todo o boilerplate da linguagem Java foi deixado de lado e agora podemos nos concentrar no que realmente importa: a solução da regra de negócio existente.

Ao fazer uso do comando object, o compilador irá gerar automaticamente um construtor privado, garantindo que não exista mais de uma instância para essa classe. Além disso, o object funciona como uma classe, então você pode estender outras classes, implementar interfaces, criar métodos, atributos e etc.


I don’t go to sleep when I’m tired. I sleep go to sleep when I’m done! — Eric Thomas

Esse é uma forma de tirar proveito do comando object em Kotlin. Se você gostou dessa postagem, não se esqueça de recomendá-la e compartilhar em suas redes sociais para que outras pessoas tenham acesso. Sinta-se a vontade para deixar um comentário a respeito dessa postagem, e não se esqueça de me seguir para ser notificado sobre novas atualizações.

Até a próxima.

Jefferson Tavares de Pádua

Written by

Android Associate Developer, ReactJS & NodeJS

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade