Junior
Jak vytvořit jedinou instanci třídy v Androidu?
sobes.tech AI
Odpověď od AI
V Androidu se obvykle používá vzor Singleton k vytvoření jediného instance třídy.
Existuje několik způsobů implementace Singleton:
-
Líné inicializace se synchronizací:
public class Singleton { private static Singleton instance; private Singleton() { // Soukromý konstruktor zabraňuje vytváření dalších instancí } public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }- Výhody: Vlákna-bezpečné.
- Nevýhody: Synchronizace může snižovat výkon při častém volání.
-
Inicializace při načtení třídy (Eager initialization):
public class Singleton { private static final Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } }- Výhody: Vlákna-bezpečné bez explicitní synchronizace. Jednodušší.
- Nevýhody: Instance je vytvořena ihned při načtení třídy, i když není použita.
-
Double-checked locking:
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; } }- Výhody: Zvýšený výkon ve srovnání s jednoduchou synchronizací, inicializace pouze při potřeby.
- Nevýhody: Vyžaduje
volatilepro správnou funkci ve vícevláknovém prostředí (od Java 5). Složitější.
-
Statická vnitřní třída:
public class Singleton { private Singleton() {} private static class SingletonHolder { public static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance() { return SingletonHolder.INSTANCE; } }- Výhody: Vlákna-bezpečné, líná inicializace, jednoduchá implementace. Nejvíce doporučovaný přístup v moderních verzích Javy.
-
Použití Enum:
public enum Singleton { INSTANCE; // Přidejte metody třídy public void doSomething() { // ... } }- Výhody: Nejjednodušší a vlákna-bezpečný způsob, odolný vůči serializaci a reflexi. Často považován za nejlepší praxi.
Volba implementace závisí na konkrétních požadavcích na výkon a složitost. V Androidu se často používají Enum nebo statická vnitřní třída.