Junior
Kaip sukurti vieną klasės egzempliorių Android?
sobes.tech AI
Atsakymas iš AI
Android dažniausiai naudojamas Singleton šablonas, norint sukurti vieną klasės egzempliorių.
Yra keletas Singleton įgyvendinimo būdų:
-
Lazy inicializacija su sinchronizacija:
public class Singleton { private static Singleton instance; private Singleton() { // Privatūs konstruktorius neleidžia kurti kitų egzempliorių } public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }- Privalumai: Srauto saugumas.
- Trūkumai: Sinchronizacija gali sumažinti našumą dažnų kvietimų metu.
-
Klasės įkėlimo metu inicializacija (Eager initialization):
public class Singleton { private static final Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } }- Privalumai: Srauto saugumas be aiškios sinchronizacijos. Paprasta.
- Trūkumai: Egzempliorius sukuriamas iš karto įkeliant klasę, net jei jis nenaudojamas.
-
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; } }- Privalumai: Padidintas našumas lyginant su paprasta sinchronizacija, inicializacija tik kai reikia.
- Trūkumai: Reikalauja
volatileteisingam veikimui daugiagijiniame kontekste.
-
Statinė vidinė klasė:
public class Singleton { private Singleton() {} private static class SingletonHolder { public static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance() { return SingletonHolder.INSTANCE; } }- Privalumai: Srauto saugumas, vėlyva inicializacija, paprasta įgyvendinti. Rekomenduojamas šiuolaikinėse Java versijose.
-
Enum naudojimas:
public enum Singleton { INSTANCE; // Klasės metodai public void doSomething() { // ... } }- Privalumai: Labiausiai paprastas ir srauto saugus būdas, atsparus serializacijai ir refleksijai. Dažnai laikomas geriausia praktika.
Pasirinkimas priklauso nuo konkrečių našumo ir sudėtingumo reikalavimų. Android dažnai naudojami Enum arba statinė vidinė klasė.