Junior
Como criar uma única instância de uma classe no Android?
sobes.tech IA
Resposta da IA
Para criar uma única instância de uma classe no Android, geralmente usa-se o padrão Singleton.
Existem várias formas de implementar o Singleton:
-
Inicialização preguiçosa com sincronização:
public class Singleton { private static Singleton instance; private Singleton() { // O construtor privado impede a criação de outras instâncias } public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }- Vantagens: Seguro para threads.
- Desvantagens: A sincronização pode reduzir o desempenho em chamadas frequentes.
-
Inicialização na carga da classe (Eager initialization):
public class Singleton { private static final Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } }- Vantagens: Seguro para threads sem sincronização explícita. Mais simples.
- Desvantagens: A instância é criada na carga da classe, mesmo que não seja usada.
-
Bloqueio com verificação dupla:
public class Singleton { private static volatile Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } }- Vantagens: Melhor desempenho que sincronização simples, inicialização apenas quando necessário.
- Desvantagens: Requer
volatilepara funcionamento correto em ambientes multithread (a partir do Java 5). Mais complexo.
-
Classe interna estática:
public class Singleton { private Singleton() {} private static class SingletonHolder { public static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance() { return SingletonHolder.INSTANCE; } }- Vantagens: Seguro para threads, inicialização preguiçosa, fácil de implementar. A abordagem mais recomendada em versões modernas do Java.
-
Uso de Enums:
public enum Singleton { INSTANCE; // Adicione métodos à classe public void doSomething() { // ... } }- Vantagens: A forma mais simples e segura para threads, resistente à serialização e reflexão. Frequentemente considerada uma melhor prática.
A escolha da implementação depende dos requisitos específicos de desempenho e complexidade. No Android, frequentemente são usados Enum ou classe interna estática.